「支払い参照番号」をelasticsearchに保存しています。
そのレイアウトは、たとえば次のとおりです。2-4-3-635844569819109531
または2-4-2-635844533758635433
など
支払い参照番号でドキュメントを検索できるようにしたい
- 「全体」の参照番号を使用した検索。
2-4-2-635844533758635433
- 「開始」からの参照番号の「部分」。例
2-4-2-63
(..なので、例の2番目のもののみを返します)
注:「途中」や「最後」などは検索したくありません。最初からのみ。
とにかく、ハイフンは私を混乱させています。
質問
1)次のようにマッピングでそれらを削除する必要があるかどうかわかりません
"char_filter" : {
"removeHyphen" : {
"type" : "mapping",
"mappings" : ["-=>"]
}
},
か否か。そのような方法でマッピングを使用したことがないため、これが必要かどうかはわかりません。
2)参照番号の一部を存在から検索できるようにしたいので、「ngrams」フィルターが必要だと思います。のようなものだと思います
"partial_word":{
"filter":[
"standard",
"lowercase",
"name_ngrams"
],
"type":"custom",
"tokenizer":"whitespace"
},
そしてフィルター
"name_ngrams":{
"side":"front",
"max_gram":50,
"min_gram":2,
"type":"edgeNGram"
},
全体をどうまとめたらいいのかわかりませんが、
"paymentReference":{
"type":"string",
"analyzer": "??",
"fields":{
"partial":{
"search_analyzer":"???",
"index_analyzer":"partial_word",
"type":"string"
}
}
}
私が試したことはすべて、2番目の検索ケースで常に「壊れる」ようです。
私が行う'localhost:9200/orders/_analyze?field=paymentReference&pretty=1' -d "2-4-2-635844533758635433"
と、それは常にハイフンを独自のトークンとして分割し、たとえば2-
「たくさん」のすべてのドキュメントを返します! 探しているときに欲しいものではありません2-4-2-6
私が達成しようとしている 2 種類の検索にこのフィールドをマップする方法を教えてもらえますか?
更新 - 回答
事実上、ヴァルが以下に言ったこと。アナライザーをより具体的にするためにマッピングを少し変更しました。また、部分的なクエリを実行するだけなので、メインの文字列にインデックスを付ける必要はありません。
マッピング
"paymentReference":{
"type": "string",
"index":"not_analyzed",
"fields": {
"partial": {
"search_analyzer":"payment_ref",
"index_analyzer":"payment_ref",
"type":"string"
}
}
}
アナライザ
"payment_ref": {
"type": "custom",
"filter": [
"lowercase",
"name_ngrams"
],
"tokenizer": "keyword"
}
フィルター
"name_ngrams":{
"side":"front",
"max_gram":50,
"min_gram":2,
"type":"edgeNGram"
},