2017-07-13 10 views
1

私はこれと苦労しています。これはうまくいくはずですが、私は何か愚かなことをしています。この検索:フィールド上のElasticSearch複数の正確な検索結果が返されない

{ 
    "query": 
    { 
    "bool": 
    { 
     "must":[ 
     {"match":{"Element.sourceSystem.name":"Source1 Source2"}} 
     ] 
    } 
} 

は、Source1とSource2の両方のデータを返します。用語検索を追加すると、下のように、Source1だけが返された最初の検索のサブセットが返されます。最初のクエリで実行されたとき、またはそれ自身で実行されたときは何も返されません。

{ 
    "query": 
    { 
    "bool": 
    { 
     "must":[ 
     {"match":{"Element.sourceSystem.name":"Source1 Source2"}}, 
     {"terms":{"Element.sourceSystem.name":["Source1"]}} 
     ] 
    } 
    } 
} 

私は、これは、文書を見ることなく難しいです実現するが、それは「Element.sourceSystem.name」が存在すると、最初の検索が正常に動作として利用可能であることを言えば十分 - すべての入力はありがたく受け取りました。

+0

最初のクエリでelasticsearchの応答を表示できますか? – jgr

答えて

2

matchクエリでは、termsクエリとは異なる処理が行われることがあります。

まず、解析装置への迂回:あなたは標準トークナイザといくつかのトークンフィルタで構成されていelasticsearchのstandard analyzerを、使用していると仮定すると、

。標準のトークナイザは、スペース、句読点などの特殊文字をトークン化(テキストを単語に分割)します。詳細はElasticsearch Documentationにありますので、ここでは「各単語は用語になります」としましょう。

アナライザの第2の非常に重要な部分は、小文字のフィルタです。用語を小文字に変換します。つまり、後でSource1source1を検索すると同じ結果が得られるはずです。

だから短い例:

入力: "これは英語で私の入力テキストです。" "this"、 "is"、 "my"、 "input"、 "text"、 "in"、 "english"という用語で分析されます。

たとえば、ドキュメントをtextフィールドにインデックスすると、このようなことが起こります。あなたの通常のマッチクエリーがうまくいくと思われるので、私はElement.sourceSystem.nameがこのタイプの1つだと思います。

"Source1 Source2"で一致クエリを発行すると、分析も行われ、トークンsource1source2に変換されます。内部的には、ブールORで2つの用語クエリを作成します。したがって、source1またはsource2のいずれかが一致する必要があります。

ところで、一致クエリはminimum_should_matchプロパティをサポートしています。一致クエリの一致条件を指定できます。

ここで、用語クエリのヒントを紹介します。それはではないあなたが提供するテキストを分析します。これは通常、タイプkeywordのフィールドで使用されることになっています。キーワードフィールドも分析されません(詳細については、mapping typesのドキュメントを参照してください - 実際はかなり重要です)。それはどういう意味ですか?

  • 上記の例を参考にすると、インデックスには"this", "is", "my", "input", "text", "in", "english"が含まれます。
  • 用語Englishが私のインデックスに存在しないためEnglishする短期/ sのクエリは、一致しませんenglish
  • に分析されますので、Englishと一致クエリは、一致します。大文字と小文字を区別します。

ご質問でsource1を使用すると非常に肯定的です。しかし、私はあなたの質問があなたのユースケースのために行く方法であることを非常に疑っています。テキストフィールドを照会するときには通常の照合クエリを使用してください(通常は必ずしも該当するとは限りません)。キーワードフィールドで用語クエリのみを使用してください。

+0

あなたの非常に詳細な答えをありがとう - それを完全に解決し、さらに私に多くの情報を与えてくれました。それは非常に便利になるでしょう。私はこれを(そして文書)たくさん参考にします。 – Fewster

関連する問題