製品コードで検索したい - 文字と数字の組み合わせ (例: 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
すべての値は単語型です。
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
。
一部の文字列型のみを強制的に使用する方法はありますか?
アイデアをありがとう!
マーティン