我目前在ES中的多重匹配搜索存在问题。 就像这样简单:如果我正在搜索“萨克森”市,那么我会得到结果。 如果我搜索“ sachsen”(小写),则没有结果。
如何避免这种情况?
查询无结果
{
"match" : {
"City" : {
"query" : "sachsen"
}
}
我的分析器是analyzer_keyword。我应该添加什么吗?
地图
City: {
type: "string",
analyzer: "analyzer_keyword"
}
答案 0 :(得分:1)
您的analyzer_keyword
分析器很可能是keyword
类型的,这意味着您只能对其执行 exact 匹配。
应用多个"variants" of a field是一种标准做法,其中之一将匹配小写的,可能是带ASCII标记的字符(请考虑München
-> munchen
),而另一个则不会以任何方式标记(这就是您analyzer_keyword
中的标记)。
由于您打算搜索Sachsen
的小写版本,因此映射可能类似于
PUT sachsen
{
"mappings": {
"properties": {
"City": {
"type": "keyword", <----
"fields": {
"standard": {
"type": "text",
"analyzer": "standard" <----
}
}
}
}
}
}
将文档编入索引
POST sachsen/_doc
{
"City": "Sachsen"
}
以下内容适用于完全匹配:
GET sachsen/_search
{
"query": {
"match": {
"City": "Sachsen"
}
}
}
这是小写字母
GET sachsen/_search
{
"query": {
"match": {
"City.standard": "sachsen"
}
}
}
请注意,我在这里使用默认的standard
分析器,但您可以选择任何您认为合适的分析器。