【问题标题】:Elasticsearch. How to find phrases if query has no spaces弹性搜索。如果查询没有空格,如何查找短语
【发布时间】:2016-02-16 03:02:04
【问题描述】:

例如,我有一个文档,其名称字段中包含短语“星球大战”。 我想使用 DSL 进行搜索并查询“starwars”并获取此文档。 我想得到这样的东西

    GET _search
{ 
    "query" : { 
        "match_phrase" : {
            "name": {
            "query" : "starwars"
            }
        }

    } 
}

如何使用 elasticsearch?

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    我认为您需要使用包含 synonym token filter 和 starwars 同义词的自定义分析器来更新该名称字段上的分析器。

    有关创建 custom analyzer 的文档应该可以帮助您。此外,如果您未在映射中为该名称字段指定任何分析器,则默认应用 standard analyzer。您可以基于此自定义分析器,并将该同义词标记过滤器添加到该过滤器数组中。或许,请多考虑一下您希望如何分析内容以满足您的其他需求。

    通过此分析器更新,您应该能够使用该查询并获得您期望的结果。

    例子:

    {
        "filter" : {
            "my_synonym" : {
                "type" : "synonym",
                "synonyms" : [
                    "star wars => starwars"
                ]
            }
        },
        "analyzer" : {
            "standard_with_synonym" : {
                "tokenizer" : "standard",
                "filter" : ["standard", "lowercase", "my_synonym", "stop"]
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多