Elasticsearch。如果查询没有空格,如何查找短语

时间:2016-02-15 18:14:17

标签: elasticsearch

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

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

    } 
}

我怎样才能使用elasticsearch?

1 个答案:

答案 0 :(得分:1)

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

有关创建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"]
        }
    }
}