2017-07-05 6 views
1

私はテキストフィールドを持つインデックスを持っています。同じテキストフィールドで用語と一致クエリの両方を使用していますか?

"state": { 
    "type": "text" 
} 

ここで、2つのデータがあるとします。

私の要件の一つ、
については
"state": "vail" 
and 
"state": "eagle vail" 

- 私は長期的なレベルのクエリを実行する必要があり、私は「ベイル」と入力した場合、検索結果は唯一の「ベイル」ではなく「鷲ベイルと状態を返す必要があることなど"

同じインデックスの異なる検索の別の要件
- 「vail」と入力すると、「eagle vail」も表示されるように全文検索の一致クエリを実行する必要があります。

私の質問は、このレベルでタームレベルクエリとフルテキスト検索の両方を行う方法です。タームレベルクエリを行う場合、分析する必要がないようにキーワードタイプとして設定する必要があります。

答えて

1

これを実現するには、「マルチフィールド」機能を使用できます。ここでのマッピングである:state.rawkeyword(単一のトークン)となるのに対し、この場合

{ 
    "mappings": { 
     "my_type": { 
      "properties": { 
       "state": { 
        "type": "text", 
        "fields": { 
         "raw": { 
          "type": "keyword" 
         } 
        } 
       } 
      } 
     } 
    } 
} 

statetextフィールド(トークン化)として作用します。ドキュメントのインデックスを作成するときは、stateと設定するだけです。 state.rawが自動的に作成されます。

+0

はい、より完全にドキュメントを調べた後、私はついにそれを見つけました。 :D。また、キーワードは大文字と小文字が区別されるので、小文字のアナライザーを使用する必要があります。 –

+0

右の 'keyword'アナライザは、テキストを変換せずに保存します。大文字と小文字を区別しない検索が必要な場合は、 'lowercase'アナライザ – Random

関連する問題