6

私はエラスティック検索が初めてです。「/」や「-」などの数字と記号で構成される部分文字列で検索したい。たとえば、デフォルト設定と 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フィルターを使用しようとしましたが、検索エンジンの要件に適合しません。

誰かがこの問題に遭遇した場合は、答えてください。

4

1 に答える 1

7

デフォルトのアナライザーは、インデックス作成時にデータからすべての特殊文字を削除します。キーワードアナライザーを使用することも、インデックス作成時にデータを分析しないこともできます。

curl -XPUT "http://localhost:9200/test/" -d ' {
    "mappings" : {
            "properties": {
                    "test_field": {
                            "type": "string",
                            "index": "not_analyzed"
                    }
            }
    }
} '
于 2012-09-28T13:31:22.087 に答える