2016-10-29 23 views
0

Elasticsearchは、フィールドを指定せずにクエリ文字列を使用して複数フィールド検索を行うフィールドアナライザを考慮していないようです。 これはインデックス用に設定することも、クエリで指定することもできますか?クエリ文字列内の同義語の複数フィールド検索

ここは実例です。

commitspring-data-elasticsearch)のファイルがあります。
SynonymRepositoryTestsというテストがあり、これはQueryBuilders.queryStringQuery("text:british")QueryBuilders.queryStringQuery("british").analyzer("synonym_analyzer")というクエリを渡します。

クエリにフィールドとアナライザを指定せずに、QueryBuilders.queryStringQuery("british")クエリで渡すことはできますか?

+0

'synonym_analyzer'をすべてのフィールドに適用しますか? – ChintanShah25

+0

いいえ、フィールドごとに異なるアナライザーがあり、単純な照会ストリングで検索可能にしたいのですが。 – cubanacan

答えて

1

フィールドまたはアナライザーを指定せずに照会することができます。デフォルトではquery string queryはすべてのフィールドの組み合わせである_allフィールドで照会し、standard analyzerを使用します。だからQueryBuilders.queryStringQuery("british")が動作します。

excludeインデックスを作成中にすべてのフィールドからいくつかのフィールドを入力することができますし、copy_to機能の助けを借りてすべてのカスタムフィールドを作成することもできます。あなたは、インデックスを作成中_allフィールドであなたのカスタムアナライザを使用する必要があります

UPDATE

PUT text_index 
{ 
    "settings": { 
    "analysis": { 
     "filter": { 
     "edge_filter": { 
      "type": "edge_ngram", 
      "min_gram": 1, 
      "max_gram": 10 
     } 
     }, 
     "analyzer": { 
     "prefix_analyzer": { 
      "tokenizer": "standard", 
      "filter": [ 
      "lowercase", 
      "trim", 
      "edge_filter" 
      ] 
     } 
     } 
    } 
    }, 
    "mappings": { 
    "test_type": { 
     "_all": { 
     "enabled": true, 
     "analyzer": "prefix_analyzer" <---- your synonym analyzer 
     }, 
     "properties": { 
     "name": { 
      "type": "string" 
     }, 
     "tag": { 
      "type": "string", 
      "analyzer": "simple" 
     } 
     } 
    } 
    } 
} 

あなたのsynonym_analyzerprefix_analyzerを置き換えることができますし、それが動作するはずです。

+0

'british'はフィールドアナライザーで定義されている' english'の同義語であるため動作しません – cubanacan

+0

問題があります。私は私の答えを更新しました、それが動作しない場合は教えてください。 – ChintanShah25

+0

助けてくださってありがとうございますが、シノニムアナライザーがすべてのフィールドに適用されることを意味しますが、各フィールドごとに構成されたアナライザーを機能させ、1つのクエリ内ですべてを検索できるようにしたいと考えています – cubanacan

関連する問題