【问题标题】:How to favor simplest, most exact field match in Elasticsearch如何在 Elasticsearch 中支持最简单、最精确的字段匹配
【发布时间】:2017-11-03 03:31:34
【问题描述】:

假设我的查询是字符串“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 确保返回“X Y A”但不返回“X A 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
                }
            }
          }
        ]
    }
  }
}

【问题讨论】:

    标签: elasticsearch mongoosastic


    【解决方案1】:

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

    【讨论】:

    • 用于搜索“X Y”的术语查询将不匹配“X Y A”或“A X Y”,您可以提升您的match_phrase query 结果在结果之上。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-18
    • 1970-01-01
    相关资源
    最近更新 更多