私はElasticsearchで新しくなっていますので、次の作業で正しく開始する方法がわかりません。Elasticsearchカスタムプラグイン:検索前に追加のクエリパラメータを追加
私はフィールドの2種類が含まれるドキュメントを使用して索引があります。
- アドレス:都市と通りを含む文字列を、
- ハウス:ハウスの数字(整数)のリスト。通常の場合には
私がfollowinクエリによって、この文書を検索できます。
(1)
GET /_search
{
"query":{
"bool":{
"should": [
{"match": {"address": "Gotham Fourteenth street"}},
{"match": {"houses": 33}}
]
}
}
}
私の目標は次のように、単一の文字列で、このような記録を一致させることです。
(2)
GET /_search
{
"query":{
"bool":{
"should": [
{"match": {"address": "Gotham Fourteenth street 33"}}
]
}
}
}
かさえ:
curl -X GET 'http://localhost:9200/_search?q=Gotham+Fourteenth+street+33'
すなわち(1)に(2)クエリを変換し、それが 'アドレス' から、家屋番号 '33' をカットし、 '家' としてそれを入れて検索が実行される前に同じクエリにmatch-parameterを指定します。
「アドレス」(解析は問題ではない)からハウスナンバーを抽出するプラグインをJavaで作成し、この値を持つ「ハウス」という余分なパラメータを追加することができたと思います。
このように私の問題は、次のとおりです。
- 検索が実行する前に、私のプラグインで、私はプログラム的に私のクエリに余分なマッチパラメータの家」を追加することができますか?
- 'address'パラメータから後続のhouse-numberトークンを削除する方法はありますか?
もちろん#1クエリが必要なレコードを見つけたが、それはすべての住宅を持つすべてのレコードを検索します。私の場合、私は家#33でレコードを見つけるしかありません。さらに複雑なのは、ハウスナンバーは「アドレス」パラメータに文字列全体として含める必要があります。 私は説明します:顧客のフロントエンドはアドレスとして単一文字列のみをサポートしています。また、私は弾性に送信する前に、この文字列を2つのパラメータに分割するためにこの文字列を前処理する機会がありません。だから私はelasticsearchでこの前処理を完全に行うべきです。 –