54

是否可以查询特定字段的所有值?假设我有“文章”并且每篇文章都有一个作者,是否可以执行查询来查找所有作者的列表?

4

7 回答 7

53

如何获取字段的所有可能值author

curl -XGET  http://localhost:9200/articles/_search?pretty -d '
{
    "aggs" : {
        "whatever_you_like_here" : {
            "terms" : { "field" : "author", "size":10000 }
        }
    },
    "size" : 0
}'

笔记

  • "size":10000最多获取 10000 个唯一值。默认值为 10。

  • "size":0默认情况下,"hits"包含 10 个文档。我们不需要它们。

  • 默认情况下,存储桶按doc_count降序排列。


参考:桶词聚合

另请注意,根据此页面,在 Elasticsearch 1.0 中,构面已被聚合取代,这是构面的超集。

于 2017-03-29T14:48:08.017 回答
25

我认为您想要的是多面搜索。从文档中查看此示例:

http://www.elasticsearch.org/guide/reference/api/search/facets/index.html

curl -X POST "http://localhost:9200/articles/_search?pretty=true" -d '
  {
    "query" : { "query_string" : {"query" : "*"} },
    "facets" : {
      "tags" : { "terms" : {"field" : "author"} }
    }
  }
'

看看你是否可以定制它来为你工作。

希望这会有所帮助,马特

于 2013-01-17T20:15:40.437 回答
3

另一个例子

要求

curl -X POST "http://localhost:9200/_search?pretty=true" -d '
{
  "facets" : {
    "tags" : { "terms" : {"field" : "network.platform"} },
    "size" : 60
  },
  "size" : 0
}
'

回复

{
  "took" : 266,
  "timed_out" : false,
  "_shards" : {
    "total" : 650,
    "successful" : 650,
    "failed" : 0
  },
  "hits" : {
    "total" : 41,
    "max_score" : 0.0,
    "hits" : [ ]
  },
  "facets" : {
    "tags" : {
      "_type" : "terms",
      "missing" : 15,
      "total" : 26,
      "other" : 0,
      "terms" : [ {
        "term" : "platform name 1",
        "count" : 20
      }, {
        "term" : "platform name 2",
        "count" : 6
      } ]
    }
  }
}
于 2014-11-19T09:44:23.657 回答
1

检查现有字段值的最快方法:

GET myindex/mytype/<id>/_termvectors?fields=Product.Material.Code
  • myindex= 索引
  • mytype= 类型
  • <id>= 文档 ID
于 2017-07-24T11:08:05.890 回答
1

您没有提到 Elasticsearch 版本,但对于 ES 1.6,首选方法是使用聚合。这是我使用的示例。

--获取所有的STATUS值,这是一个嵌套查询。

GET path for data/_search?size=200
{
  "aggs": {
    "something": {
      "nested": {
        "path": "NESTED_PATH"
      },
      "aggs": {
        "somethingCodes": {
          "terms": {
            "field": "NESTED_PATH.STATUS",
            "size": 50
          }
        }
      }
    }
  }
}

和一个示例响应:

"aggregations": {
      "panels": {
         "doc_count": 5029693,
         "panelCodes": {
            "doc_count_error_upper_bound": 0,
            "sum_other_doc_count": 0,
            "buckets": [
               {
                  "key": "M",
                  "doc_count": 1943107
               },
               {
                  "key": "W",
                  "doc_count": 137904
               },
               {
                  "key": "E",
                  "doc_count": 69080
               },
               {
                  "key": "Y",
                  "doc_count": 4081
               },
               {
                  "key": "N",
                  "doc_count": 1063
               },
               {
                  "key": "T",
                  "doc_count": 483
               },
               {
                  "key": "",
                  "doc_count": 1
               }
            ]
         }
      }
   }
于 2016-09-30T14:41:40.327 回答
1

我认为最佳方法是使用弹性搜索聚合 https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html

GET {index}/{type}/_search
{
  "size": 0, <-- to not display search hits
  "aggs": {
    "{aggregation_name}": {
      "terms": {
        "field": "{filed_value}",
        "size": 10
      }
    }
  }
}
于 2020-04-07T10:57:01.540 回答
0

请使用以下代码从索引中的所有内容中仅获取“文章”字段值的列表。

curl ' http://localhost:9200/my_index/_search?pretty=true&_source=articles '

它肯定会帮助你。

于 2019-06-20T10:33:27.927 回答