1

アナライザーによる分析のデフォルトのインデックス作成ポリシーを持つようにelasticsearchインデックスを構成しようとしていますkeyword。次に、いくつかのフィールドでそれをオーバーライドして、それらをフリーテキスト分析できるようにします。したがって、フリー テキスト分析を効果的にオプトインします。ここでは、フリー テキスト マッチングのためにどのフィールドを分析するかをマッピングで明示的に指定しています。私のマッピング定義は次のようになります。

PUT test_index
{
   "mappings":{
      "test_type":{
         "index_analyzer":"keyword",
         "search_analyzer":"standard",
         "properties":{
            "standard":{
               "type":"string",
               "index_analyzer":"standard"
            },
            "keyword":{
               "type":"string"
            }
         }
      }
   }
}

したがってstandard、分析されたフィールドであるkeyword必要があり、完全一致のみである必要があります。ただし、次のコマンドでサンプルデータを挿入すると:

POST test_index/test_type
{
  "standard":"a dog in a rug",
  "keyword":"sheepdog"
}

次のクエリに対して一致が得られません。

GET test_index/test_type/_search?q=dog

ただし、次のものと一致します。

GET test_index/test_type/_search?q=*dog*

standardこれは、フィールドが分​​析されていないと私に思わせます。私が間違っていることを誰かが知っていますか?

4

1 に答える 1

2

作成されたインデックスに問題はありません。クエリをに変更するGET test_index/test_type/_search?q=standard:dogと、期待される結果が返されるはずです。

クエリでフィールド名を指定したくない場合は、デフォルト値なしで各フィールドにindex_analyzersearch_analyzerの値を明示的に指定するようにマッピングを更新します。下記参照:

PUT test_index
{
   "mappings": {
      "test_type": {
         "properties": {
            "standard": {
               "type": "string",
               "index_analyzer": "standard",
               "search_analyzer": "standard"
            },
            "keyword": {
               "type": "string",
               "index_analyzer": "keyword",
               "search_analyzer": "standard"
            }
         }
      }
   }
}

を試してみるとGET test_index/test_type/_search?q=dog、望ましい結果が得られます。

于 2015-03-30T15:15:50.293 に答える