我想在产品代码中搜索 - 字符和数字的混合(例如:A210/444
、、Alexx 1982 X
...)。(顺便说一句:有没有人在这种类型的数据中搜索的一些最佳实践?)
我有一个索引index_analyzer
和search_analyzer
:
{
"settings": {
"analysis": {
"analyzer": {
"index_analyzer": {
"tokenizer": "standard",
"filter": [
"standard",
"lowercase",
"asciifolding",
"custom_word_delimiter",
"custom_edgengram"
]
},
"search_analyzer": {
"tokenizer": "standard",
"filter": [
"standard",
"asciifolding",
"custom_word_delimiter",
"lowercase"
]
}
},
"filter": {
"custom_word_delimiter": {
"type": "word_delimiter",
"preserve_original": "true"
},
"custom_edgengram": {
"type": "edgeNGram",
"min_gram": "2",
"max_gram": "30"
}
}
}
}
}
问题在于自动输入。
index_analyzer
没关系,所有值都是 word 类型。
curl -XGET 'http://localhost:9200/myindex/_analyze?analyzer=index_analyzer&pretty' -d 'Alexx 1982 X' | elasticat.rb
+---+------------+------+------+
| 1 | al | 0–5 | word |
| 1 | ale | 0–5 | word |
| 1 | alex | 0–5 | word |
| 1 | alexx | 0–5 | word |
| 2 | 19 | 6–10 | word |
| 2 | 198 | 6–10 | word |
| 2 | 1982 | 6–10 | word |
+---+------------+------+------+
但是,search_analyzer
(没有 edgeNGram)...
curl -XGET 'http://localhost:9200/myindex/_analyze?analyzer=search_analyzer&pretty' -d 'Alexx 1982 X' | elasticat.rb
+---+------------+-------+------------+
| 1 | alexx | 0–5 | <ALPHANUM> |
| 2 | 1982 | 6–10 | <NUM> |
| 3 | x | 11–12 | <ALPHANUM> |
+---+------------+-------+------------+
...识别1982
为数字,这会在搜索中出现问题(使用_all
占位符)。当我尝试仅搜索时,在搜索结果中没有命中1982
。
有什么方法可以强制只使用某些字符串类型吗?
感谢您的任何想法!
马丁