2015-02-09 50 views
0

我有存储用户知道的技巧文件:ElasticSearch:如何在子组中查询?

{ 
"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,但skill.name是完全不同的东西。

有没有什么办法可以告诉弹性,我不希望这些搜索是“本地”范围的?我不知道这个场景的名字。对不起,如果我没有正确地调用它。

我正在运行的查询还具有自定义_score功能,该功能可为具有第三个指标(不包括与其无关的指标)的用户提供更高的分数。可能是因为这种自定义分数功能?可能会给“错误”的用户一个更高的分数,因为第三个指标高于具有所需技能和水平的用户?

谢谢。

+1

我完全不理解你的问题,但它看起来像你想'必须'的条款,而不是'应该' – 2015-02-09 17:28:46

+0

请记住'应该'条款可以被认为是一个布尔'OR'而不是'AND',这更多是'必须'实现的) - 我认为默认情况下,任何满足这些条件之一(并且可以是任何一个)的文档都会匹配,尽管这个要求可以通过'minimum_should_match'明确指定。 http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html – rchang 2015-02-09 20:09:18

+0

嗨,大家好,谢谢你的回复。它不能成为'必须',因为'应该'条件只是为了增加分数。设想一个用户在技能上的重量为0,它仍然应该出现,但较低。 – Topikito 2015-02-10 09:29:17

回答