1. ホーム
  2. elasticsearch

[解決済み] Elasticsearch 用語」「マッチフレーズ」「クエリストリング」の違いについて

2022-05-26 21:01:25

質問

Elasticsearchは初めてで、これらのクエリの違いについて理解を深めたいと思っています。私が知る限りでは term は単一の用語にマッチし(マッチするためには小文字にする必要がある? match phrasequery string は文字列にマッチします。

どのように解決するのですか?

term クエリはそのまま一つの用語にマッチします : 値は 分析されていない . つまり、インデックスされている内容によっては小文字にする必要はないのです。

もしあなたが Bennett を指定し、その値が解析されていない場合、次のクエリは何も返しません。

{
  "query": {
    "term" : { "user" : "bennett" }
  }
}

match_phrase クエリーは、クエリーされたフィールドにアナライザーが定義されている場合、入力を分析し、以下の条件に一致するドキュメントを見つけます。

  • すべての用語 はフィールドに表示されなければなりません。
  • を持つ必要があります。 同じ順序 入力値として
  • 間に用語があってはならない、つまり連続していなければならない(ストップワードを除く可能性があるが、これは複雑な場合がある)。

例えば、次のような文書をインデックス化する場合 ( standard アナライザでフィールド foo ):

{ "foo":"I just said hello world" }

{ "foo":"Hello world" }

{ "foo":"World Hello" }

{ "foo":"Hello dear world" }

これは match_phrase クエリは、1番目と2番目のドキュメントだけを返します。

{
  "query": {
    "match_phrase": {
      "foo": "Hello World"
    }
  }
}

query_string クエリ検索は、デフォルトでは _all フィールドを検索します。これは複数のテキストフィールドのテキストを一度に含むものです。その上、解析され、いくつかの演算子(AND/OR...)やワイルドカードなどをサポートしています(詳しくは 関連構文 ).

のように match_phrase のクエリでは、クエリされたフィールドに設定されたアナライザに従って入力が解析されます。

とは異なり match_phrase とは異なり、分析後に得られる用語は、ユーザーが入力の周りに引用符を使用しない限り、同じ順序である必要はありません。

例えば、先ほどと同じ文書を使った場合、このクエリはすべての文書を返します。

{
  "query": {
    "query_string": {
      "query": "hello World"
    }
  }
}

しかし、このクエリでは、同じ 2 つのドキュメントが match_phrase クエリと同じ 2 つのドキュメントを返します。

{
  "query": {
    "query_string": {
      "query": "\"Hello World\""
    }
  }
}

これらのクエリに対するさまざまなオプションについては、さらに多くのことが語られています。関連するドキュメントを参照してください。

これが十分に明確で、助けになることを願っています。