Elasticsearch查询以查找具有等于指定数量的项的值的数量的文档

时间:2017-12-04 13:28:11

标签: elasticsearch elasticsearch-2.0

我有一个带有以下映射的Elasticsearch索引“library”:

{
  "mappings": {
    "book": { 
      "properties": { 
        "title":    { "type": "text", "index": "not_analyzed" }, 
        "author":   { "type": "text", "index": "not_analyzed" }, 
        "price":    { "type": "integer" },  
    }
  }
}

现在我想查询以查找作者数量等于3的所有文档(书籍)。即我想要进行匹配的查询

curl -XGET "http://localhost:9200/library/_search?pretty=true" -d '{
    "query": {
        "match": {
            Number of values of term "author" = 3.
        }
    }
}'

有没有办法在不增加额外条款的情况下进行此类查询?

[我知道聚合在搜索结果中找到一个术语的所有可能值但是无法根据上述标准转换该聚合。]

1 个答案:

答案 0 :(得分:1)

无法找到一种方法来准确地为每个作者提供3个文档。 聚合将为您提供所有可能的值。但是,它也会向您展示doc_count - 我们可以找到自己的方式:

{
  "size": 0,
  "aggregations": {
    "authors": {
      "terms": {
        "field": "author",
        "min_doc_count": 3,
        "size": 5
      }
    }
  }
}

min_doc_count - 仅过滤包含至少3个文档的存储桶。

大小 - 只会为您提供前5个文档(请记住,默认情况下,存储桶按' doc_count'升序排序)。

现在,您可以调整size以获得具有3个文档的作者。