2016-10-11 157 views
0

以下查询查找具有所有的词“look”的文件,“for”和“此:ElasticSearch查询字符串查询default_operator

"query": { 
      "query_string": { 
       "query": "look for this", 
       "default_operator":"AND" 
      } 
     } 

虽然这一发现有任何的任何文件三个字:

"query": { 
      "query_string": { 
       "query": "look for this", 
       "default_operator":"OR" 
      } 
     } 

我的问题是如何改变查询,以便它执行谷歌风格的搜索,即它首先列出具有所有条款则有其中的任何文件的文件

我将不胜感激任何帮助。

回答

1

默认情况下,Elasticsearch会给所有条款存在的文档提供更高的分数。你可以使用explain api来看看。

如果你真的想给文档非常高的分数,所有的条件都存在,那么你可以使用bool query

{ 
    "query": { 
    "bool": { 
     "should": [ 
     { 
      "query_string": { 
      "default_field": "title", 
      "query": "look for this", 
      "default_operator": "AND" 
      } 
     }, 
     { 
      "query_string": { 
      "default_field": "title", 
      "query": "look for this" 
      } 
     } 
     ] 
    } 
    } 
} 

编辑1

你可以使用fuction score query给予高提振预期的结果。尝试以下查询

{ 
    "query": { 
    "function_score": { 
     "query": { 
     "bool": { 
      "should": [ 
      { 
       "query_string": { 
       "fields": [ 
        "title" 
       ], 
       "query": "look for this", 
       "default_operator": "AND" 
       } 
      }, 
      { 
       "query_string": { 
       "query": "look for this", 
       "fields": [ 
        "title" 
       ] 
       } 
      } 
      ] 
     } 
     }, 
     "functions": [ 
     { 
      "filter": { 
      "query": { 
       "query_string": { 
       "fields": [ 
        "title" 
       ], 
       "query": "look for this", 
       "default_operator": "AND" 
       } 
      } 
      }, 
      "weight": 10 
     } 
     ] 
    } 
    } 
} 
+0

我试过这个,但它并没有将所有单词都放在顶部。我怎样才能做到这一点? – na1368

+0

我又增加了一个方法,如果你还没有得到想要的结果,你可以尝试改变重量到100。我仍然不确定ES为什么不会给所有条款的文档都给予高分,你正在使用哪个版本的ES?你也在'_all'字段上唧唧喳喳,但我不知道这可能是一个问题 – ChintanShah25