我有文件存储用户知道的技能:
{
"size": 1000,
"query": {
"function_score": {
"query": {
"bool": {
"should": [
{
"query_string": {
"query": "Objective-C",
"default_field": "user.skill.name"
}
},
{
"range": {
"user.skill.weight_relative": {
"gte": 1
}
}
},
{
"range": {
"user.skill.weight_absolute": {
"gte": 1
}
}
},
...
问题我遇到的问题是ElasticSearch正在返回用户,例如skill.name == Objective-C
,但相对和绝对的权重为0,而且得分大于1的用户,但技能。名字是完全不同的东西。
有没有办法告诉弹性我认为这些搜索是"本地"作用域?我不知道这个场景的名称。如果我没有正确地调用它,请原谅。
我正在运行的查询也有一个自定义_score函数,它为具有第三个指标的用户提供更高的分数(不包括其不相关)。可能是因为这个自定义分数功能?可能它会给出错误的"用户得分较高,因为第三个指标高于具有所需技能和水平的用户?
感谢。
答案 0 :(得分:0)
找到我要找的东西:
http://www.elasticsearch.org/blog/managing-relations-inside-elasticsearch/
必须将元素的类型从object
更改为nested
并执行nested
搜索。链接中的示例显示了我正在经历的内容。