【问题标题】:How do prioritize matches in the beginning of strings in Elasticsearch?如何在 Elasticsearch 的字符串开头优先匹配匹配?
【发布时间】:2019-06-21 16:46:52
【问题描述】:

我有一个 Elasticsearch 实例,其中充满了包含电影和系列片名的文档。

当我运行这个时:

{
  "query": {
    "bool": {
      "must": [
        {
          "multi_match": {
            "fields": [
              "Name^2",
              "SeriesName^1.5",
              "Description"
            ],
            "fuzziness": "AUTO",
            "prefix_length": 2,
            "query": "game"
          }
        }
      ]
    }
  }
}

...我得到了“大游戏”、“饥饿游戏”、“战争游戏”等标题。

但是,我希望在标题仅包含“游戏”之前获得以“游戏”开头的标题。

当用户搜索“游戏”时,他们希望在“模仿游戏”之前出现“权力的游戏”和“游戏改变”之类的标题。

我怎样才能使这个更精确?谢谢!

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    试试下面的方法:

    { "query": {
        "prefix" : { "Name" : "game" }
      }
    }
    

    请参阅相同Elasticsearch Documentation的文档

    为此,您的字段/属性必须被标记为关键字,请参阅下面的查询。您还可以在映射中为您的字段/属性添加一个额外的小写过滤器。

    {
        "settings": {
            "index": {
                "analysis": {
                    "analyzer": {
                        "analyzer_startswith": {
                            "tokenizer": "keyword",
                            "filter": "lowercase"
                        }
                    }
                }
            }
        },
        "mappings": {
            "test_index": {
                "properties": {
                    "Name": {
                        "search_analyzer": "analyzer_startswith",
                        "index_analyzer": "analyzer_startswith",
                        "type": "string"
                    }
                }
            }
        }
    }
    

    【讨论】:

    • 谢谢,但这些替代方案不会排除名称字符串中间带有“游戏”的标题吗?我想优先考虑以“游戏”开头的标题,但也包括其余部分。以及如何同时使用multi_match、fuzzy等?
    • 触发 2 个不同的查询...第一个用于开头...第二个用于包含...合并结果
    • 等等...运行您的前缀查询时,我得到:“暗杀游戏”...我很抱歉,但这不是我想要的。我想获取与字段名称中字符串的 START 匹配的文档。
    • 如何索引属性...它的映射是什么...您是否应用了上述映射
    • 你写答案的方式让我觉得索引是另一种选择。我现在明白我实际上必须用关键字索引它。
    猜你喜欢
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-09
    • 1970-01-01
    • 1970-01-01
    • 2012-08-26
    相关资源
    最近更新 更多