我对弹性搜索分析器有疑问。 我创建了一个这样的自定义分析器:
Analyzers(o => o.Custom("custom",
m => m.CharFilters("icu_normalizer").Filters("lowercase", "asciifolding").Tokenizer("icu_tokenizer")
并尝试了分析仪,得到以下标记(好):
/_analyze?analyzer=custom&text=SödertorG
{
"tokens": [
{
"token": "sodertorg",
"start_offset": 0,
"end_offset": 9,
"type": "<ALPHANUM>",
"position": 0
}
]
}
但是当我尝试搜索此令牌时,就像这样:
_search?q=sodertorg&analyzer=custom
我没有得到任何结果(糟糕)。
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 0,
"max_score": null,
"hits": []
}
}
我错过了什么吗? 感谢。
答案 0 :(得分:0)
在您执行query_string
查询时,您将定位_all
字段。查询字符串中指定的analyzer
仅适用于分析查询的方式; 1}}字段在索引内容时仍将使用_all
分析器。
要解决此问题,您需要确保将自定义standard
应用于映射中的analyzer
字段,例如
_all
在映射中以这种方式应用分析器,你应该得到预期的结果;您不再需要在查询中指定分析器,因为映射中的分析器将用于索引时间和查询时间分析。