web-dev-qa-db-ja.com

範囲と用語一致json形式を組み合わせてElasticsearchにクエリを実行する

時間範囲でElasticsearchインデックスを照会しようとしていますが、さらに、特定の文字列値に一致する用語があります。

私はこのクエリを試してみましたが、これはかなり簡単なようです:

 {
  "query" : {
    "bool": {
      "must": [
        {
          "match": {
            "method": "/customer/help"
          }
        },
        {
          "range" : {
            "startTime": {
              "from" : "2015-10-20T13:00-04:00",
              "to" : "2015-10-20T14:00-04:00"
            }
          }
        }
      ]
    }
  }
}

この場合、"/customer/help"のメソッド値を持つ、指定された時間範囲内のすべてのドキュメントが必要です。

私の結果では、時間範囲内の結果を受け取っていますが、"method"のフィールドに結果が必要なだけの場合に、"/customer/help"フィールドのさまざまな値を持つドキュメントを取得しています。

13
smithzo622

マッピングでは、methodnot_analyzedとして(またはkeywordアナライザーで分析して)、クエリでtermを使用する必要があります。このようにして、メソッドでインデックス付けするテキストは、単一のトークンとしてそのままインデックス付けされ、termは、検索するテキストがmethodでインデックス付けされたトークンと完全に一致することを確認します。

    "method": {
      "type": "string",
      "index": "not_analyzed"
    }

そして、使用する必要があるクエリ:

{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "method": "/customer/help"
          }
        },
        {
          "range": {
            "startTime": {
              "from": "2015-10-20T13:00-04:00",
              "to": "2015-10-20T14:00-04:00"
            }
          }
        }
      ]
    }
  }
}
20
Andrei Stefan