在Elasticsearch中获取布尔子句匹配计数

时间:2016-05-20 19:34:21

标签: elasticsearch

我们有一些Elasticsearch查询采用以下形式:

{{1}}

我们希望在每个布尔子句上显示命中计数。我们目前的暴力方法是在封面下执行辅助多重搜索,将每个子句拆分为自己的单独查询以获取个别计数。这可能会变得非常昂贵,因为我们支持多达50个这些条款,这些条款可能会导致在幕后执行另外50个查询。

我们一直在寻找其他方法来提取Get matched terms from Lucene query或。{ lucene get matched terms in query但是所有这些都涉及计算实际命中数的bean。这是令人望而却步的,因为我们可能有成千上万的。

是否有另一种更有效的方法/技术(最好是在Elasticsearch中)来获取我们可能错过的那些计数?

1 个答案:

答案 0 :(得分:2)

也许添加过滤器聚合可以做到这一点:

{
  "query": {
    "bool": {
      "should": [
        {
          "query_string": {
            "default_field": "content",
            "query":  "Lorem ipsum dolor sit amet"
          }
        },
        {
          "query_string": {
            "default_field": "content",
            "query": "Nunc ac auctor massa"
          }
        }
      ]
    }
},
  "aggs": {
    "2": {
      "filters": {
        "filters": {
          "message:fake": {
            "query": {
              "query_string": {
                "query": "content: \"Lorem ipsum dolor sit amet\"",
                "analyze_wildcard": true
              }
            }
          },
          "message:data": {
            "query": {
              "query_string": {
                "query": "content:\"Nunc ac auctor massa\"",
                "analyze_wildcard": true
              }
            }
          }
        }
      }
    }
  }
}

因此,您将了解它们分别显示的文档数量。