1

假设我的查询是字符串“X Y”,其中 X 和 Y 是单词,并且我的数据库包含字符串:

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

如何确保始终以最高分返回“X Y”?我想返回“X Y”,因为它完全匹配(没有多余的单词)。

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

当前实现(不起作用),在这里我试图返回带有 name="Foo bar" 的条目作为顶部结果:

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
                }
            }
          }
        ]
    }
  }
}
4

1 回答 1

0

我意识到您可以使用“术语”关键字实现所需的行为。

于 2017-06-01T22:45:29.473 回答