我如何索引单词,例如Elasticsearch中的L'Oréal?
用户可以通过两种方式输入:
理想情况下,我希望它们全部输出loreal。我不想为每个特殊关键字手动执行此操作。
Elision Token Filter似乎很有用,但仅适用于第二和第三种情况。
任何想法,我将如何使所有这些关键字输出相同的标记
loreal
? 最佳答案
省略 token 过滤器实际上会删除指定的文章,因此您的 token 中永远不会包含loreal
,即第一个l
永远不会包含它。
我的建议是结合使用asciifolding
和lowercase
进行以下操作:
PUT test_index
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "standard",
"filter": [
"standard",
"asciifolding",
"lowercase"
],
"char_filter": [
"apostrophe"
]
}
},
"char_filter": {
"apostrophe": {
"type": "mapping",
"mappings": [
"'=>"
]
}
}
}
}
}
使用
my_analyzer
,您指定的所有输入字符串将转换为loreal
token 。curl -XGET 'localhost:9200/test_index/_analyze?analyzer=my_analyzer&pretty' -d "Loreal"
=> loreal
curl -XGET 'localhost:9200/test_index/_analyze?analyzer=my_analyzer&pretty' -d "L'Oreal"
=> loreal
curl -XGET 'localhost:9200/test_index/_analyze?analyzer=my_analyzer&pretty' -d "L'Oréal"
=> loreal