我对ElasticSearch查询有疑问。我有一个名为“name”的字段,它是用语音插件中的分析器定义的。
"name" : {
"type" : "string",
"store" : "yes",
"index" : "analyzed",
"analyzer" : "soundsAnalyzer",
"boost" : 10.0
},
到目前为止一切正常!但是我对这个领域有一定的疑问,我希望得到完全匹配而不是类似的匹配。我试图通过使用术语查询和文本查询来实现此目的。术语查询根本不返回任何结果,我没有胶水为什么。通过使用文本查询和定义另一个分析器,我什么也没得到。我尝试过以下查询:
{
"query": {
"text": {
"documents.name": {
"query": "England",
"analyzer": "plainAnalyzer"
}
}
}
}
所以我的问题是,如何在映射中避免定义的分析器,只是为了获得完全匹配? TIA
答案 0 :(得分:1)
您必须为此字段编制两次索引 - 一次使用soundsAnalyzer
,另一次使用plainAnalyzer
。您可以使用multi_field类型:
"name" : {
"type" : "multi_field",
"fields" : {
"name" : {"type" : "string", "store" : "yes", "index" : "analyzed", "analyzer" : "soundsAnalyzer", "boost" : 10.0},
"plain" : {"type" : "string", "index" : "analyzed", "analyzer" : "plainAnalyzer"}
}
}
使用soundsAnalyzer
的所有当前查询将保持不变。在需要plainAnalyzer
的查询中,您可以使用name.plain
代替name
:
{
"query": {
"text": {
"documents.name.plain": {
"query": "England"
}
}
}
}