嵌套Elasticsearch数据的多重过滤

时间:2019-02-14 19:17:16

标签: elasticsearch nested-queries

我有一个看起来像这样的数据结构:

"dictionaryProximities": [
     {
       "proximity": 0.32427,
       "topicDictionaryName": "Electrical",
     },
     {
       "proximity": 0.32141,
       "topicDictionaryName": "Indoor Air Quality",
     },
     {
       "proximity": 0.7321,
       "topicDictionaryName": "Smart Home Technology",
     },

我想创建一个过滤器/查询,该过滤器/查询将返回“智能家居技术”的接近度大于某个值(例如0.7)的所有文件。

现在我有查询:

{
  "query": {
    "nested": {
      "path": "dictionaryProximities",
      "query": {
        "match": {
          "dictionaryProximities.topicDictionaryName": {
            "query": "Smart Home Technology",
            "type": "phrase"
          }
        }
      }
    }
  }
} 

与查询一起堆积:

{
  "query": {
    "nested": {
      "path": "dictionaryProximities",
      "query": {
        "range": {
          "dictionaryProximities.proximity": {
            "gte": 0.7,
            "lt": 1
          }
        }
      }
    }
  }
}

这将返回所有接近度大于0.7且名称为Smart Home Technology的文件。这与我想要的有很大的不同,后者是智能家居技术的所有文件的相近度仅在0.7以上。

我的问题是,有没有一种方法可以将这两个查询组合起来以达到我想要的结果?由于接近度和名称嵌套在同一级别,该任务甚至有可能实现吗?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

想通了。

{
  "query": {
    "nested": {
      "path": "dictionaryProximities",
      "query": {
        "bool": {
         "must": [
            {"match": {"dictionaryProximities.topicDictionaryName": "Windows and Doors"}},
            {"range": {"dictionaryProximities.proximity": {"gt": "0.6", "lt": "1.0"}}}
                 ]
          }
          }
        }
      }
    }