例如,我在名称字段中有一个带有“星球大战”短语的文档。 我想用DSL搜索并查询“starwars”并获取此文档。 我想要得到这样的东西
GET _search
{
"query" : {
"match_phrase" : {
"name": {
"query" : "starwars"
}
}
}
}
我怎样才能使用elasticsearch?
答案 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"]
}
}
}