1. ホーム
  2. elasticsearch

[解決済み] elasticsearchのマッチとタームクエリ

2023-03-13 08:18:31

質問

request.method": "GET"のマッチクエリ検索を使用しています。

    {
      "query": {
        "filtered": {
          "query": {
            "match": {
              "request.method": "GET"
            }
          },
          "filter": {
            "bool": {
              "must": [
...

予想通り、Matchクエリは以下のような結果を得ることができます。

しかし、問題は、Termクエリを使用したときに、結果がないことです。

クエリを更新して、"match" を "term" に変更し、他の部分は同じままにしておきます。

{
  "query": {
    "filtered": {
      "query": {
        "term": {
          "request.method": "GET"
        }
      },
      "filter": {
        "bool": {
          "must": [
...

TermクエリはMatchクエリのquot;not analyze"バージョンだと思います。上の図のように、少なくとも1つのレコードは "request.method" が "GET" と等しくなっています。上記のTermクエリで結果が出ないのはなぜですか?ありがとうございます。

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

あなたが 標準アナライザー GET となる get になります。ソースドキュメントには元の"GET"が残ります。

match クエリは同じ標準アナライザを検索語に適用し、インデックスに格納されているものと一致します。このクエリは term クエリは検索語に解析器を適用しないので、転置インデックスの中からその単語を探すだけとなります。

この例で用語クエリを使用するには、大文字の "GET" を小文字の "get" に変更するか、マッピングを変更して request.method フィールドが次のように設定されるようにします。 not_analyzed .