私はエラスティック検索が初めてです。「/」や「-」などの数字と記号で構成される部分文字列で検索したい。たとえば、デフォルト設定と 1 つのインデックス付きフィールドでインデックスを作成します。
curl -XPUT "http://localhost:9200/test/" -d ' {
"mappings" : {
"properties": {
"test_field": {
"type": "string"
}
}
}
} '
次に、いくつかのデータをインデックスに追加します。
curl -XPOST "http://localhost:9200/test/test_field" -d '{ "test_field" : "14/21-35" }'
curl -XPOST "http://localhost:9200/test/test_field" -d '{ "test_field" : "1/1-35" }'
curl -XPOST "http://localhost:9200/test/test_field" -d '{ "test_field" : "1/2-25" }'
インデックスを更新した後、検索を実行します。そこで、「test_field」が「1/1」で始まるデータを探したいと思います。私の要求:
curl -X GET "http://localhost:9200/test/_search?pretty=true" -d '{"query":{"query_string":{"query":"1/1*"}}}'
ヒットを返しません。星の記号を削除すると、応答として「1/1-35」と「1/2-25」の 2 つのヒットが表示されます。スラッシュ記号をバックスラッシュ("1\/1*") でエスケープしようとすると、結果はそれぞれ同じです。
クエリに「-」記号がある場合、この Lucene 特殊文字をエスケープする必要があります。だから私は次の検索リクエストを送信します:
curl -X GET "http://localhost:9200/test/_search?pretty=true" -d '{"query":{"query_string":{"query":"*1\-3*"}}}'
解析エラーで返されます。二重エスケープ ("\\") マイナスの場合、結果はありません。
クエリがこれらの文字で構成されている場合、検索がどのように実行されるかわかりません。多分私は何か間違ったことをしています。
カスタム アナライザーでnGramフィルターを使用しようとしましたが、検索エンジンの要件に適合しません。
誰かがこの問題に遭遇した場合は、答えてください。