2016-03-27 22 views
0

私はTHISという結果を得ていませんでした。ポストは、_allでデータがインデックスされる方法が異なると説明しています。しかし、それについて説明するつもりはありません。誰かが私にこれを理解するのを助けてくれますか? { "name": "John Doe", "occuptation": "Farmer", "favorite_ice_cream": "chocolate" }', { "name": "Jane Doe", "occuptation": "Doctor", "favorite_ice_cream": "vanilla" }' _allインデックスでの弾性検索

も好きなアイスクリームのフィールドは非分析されているとします

GET /_search?q=2014    # 12 results 
GET /_search?q=2014-09-15  # 12 results ! 

答えて

3

は、あなたがこのような文書があるとします。分析されていないフィールドは、キャッシング可能で集約が容易です(したがって、バニラなどのチョコレートアイスクリームを好む人の数を数えやすくなります)。しかし、分析されていないフィールドはデフォルトでは検索できません。

...デフォルトでは、Elasticsearchはドキュメント内のすべてのフィールドを取り、それらを_allフィールドにまとめ、Luceneで解析します。したがって、最初の文書では、Elasticは文字列 "John Doe Farmer chocolate"を分析し、2番目のフィールドではElasticsearchが "Jane Doe Doctor vanilla"を分析します。その結果、上記のようなクエリを送信すると、たとえばGET /_search?q=chocolateを検索し、John Doeがチョコレートアイスクリームを好きであることがわかります。また、クエリ文字列クエリ(https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html)を送信して_allフィールドを検索し、誰がチョコレートを好きなのか把握することもできます。しかし、あなたが好きなアイスクリームのフィールドとの照合クエリを使用することはできませんでした...結局のところ、Luceneにそのフィールドを分析しないように指示しました。ただし、フィールドでフィルタを使用し、favorite_ice_creamがchocolateと等しいすべてのドキュメントを戻すことができます。

最初は慣れていたのは大変ですが、読んでいるドキュメントのバージョンを確認しておくと、ドキュメントはうまく混乱しません。

また、役に立った場合、私は__allフィールドを刑務所のないカードから出てくるようなものと考えるのが好きです。多くの場合、フィールドを分析しないでください。集計を実行したり、フィルタを適用したりしたいからです。私は通常、フィルターに必要な値を思い出していますが、時には_allフィールドに検索を提出して確実にすることが有益です。たとえば、私の "country"フィールドに "米国の価値として「米国」または「米国の国」を使用すると、_allフィールドに対するクエリをすばやく実行し、少数のドキュメントを見てから、適切なフィルタ値を選ぶことができます。

私が_allフィールドを使用した別の方法は、特定のフィールドの一致をさらに高めたいフルテキスト検索ですが、何か起こった場合に備えてドキュメントのすべてのフィールドも検索したい一致。 _allに対するクエリ文字列クエリは、そのような状況ではうまくいきます。

あなたがここに_allフィールドの詳細について学ぶことができます:あなたはおそらく単純なクエリにあなたがしている方法を提出する必要はありません...これはあなたが始めるのに十分ですhttps://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-all-field.html

希望を。おそらく、あなたは完全な質問DSLを利用するPOST要求を提出したいと思うでしょう。詳しくは、こちらをご覧ください:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-filter-context.html

最高の運が!

+0

申し訳ありませんが、結果が私の例で12回発生したことはまだ分かりませんでした。私はそれが私の質問に答えると思っている答えとしてそれを受け入れましたが、そうはしません。 – Andy897

+0

これを(q =で)照会する方法では、全文検索照会である照会文字列照会を提出しています。あなたはたぶん全文検索を望んでいないでしょう。あなたが戻ってきたのはあなたの検索に関連した結果であるからです。すべての文書には2014が含まれているため、2014-09-15のクエリ文字列クエリと一致していると見なされます。しかし、どの結果が関連性があるほど近いのかは望んでいません。正確な値でデータをフィルタリングする必要があります。基本的には...ここでの違いは、関連性と完全一致 – evanv

関連する問題