2017-06-01 39 views
0

最简单,最准确的现场比赛本来我的查询字符串“XY”,其中X和Y的话,我的数据库包含字符串:如何有利于在Elasticsearch

"A X Y" 
"X Y" 
"A B C X Y" 
"X Y D E" 

我如何确保“XY “总是以最高分回归?我想返回“X Y”,因为它完全匹配(没有额外的单词)。

看过文档后,我尝试使用match_phrase关键字,但我相信这只能帮助我的查询顺序匹配单词。所以match_phrase确保返回“X Y A”,但“X A Y”不是。它不能解决返回最精确匹配的问题。

当前实现(不工作),我在这里试图返回与name =“富巴”的条目作为顶级的结果:

GET _search 
{ 
    "query" : { 
    "bool" : { 
     "must": [ 
     { 
      "query_string": { 
      "query": "Foo bar" 
      } 
     } 
     ], 
     "filter": [], 
     "should": [ 
      { 
      "match": { 
       "name": { 
       "query":"Foo bar", 
       "boost": 2 
       } 
      } 
      }, 
      { 
      "match_phrase": { 
       "name": { 
        "query": "Foo bar", 
        "boost": 5 
       } 
      } 
      } 
     ] 
    } 
    } 
} 

回答

0

我意识到你能达到预期的行为使用“term”关键字。

+0

要搜索“X Y”的术语查询将不匹配“X Y A”或“A X Y” 您可以提高您的'match_phrase'查询结果在结果之上。 – Prashant