是否可以查询特定字段的所有值?假设我有“文章”并且每篇文章都有作者,我是否可以执行查询以查找所有作者的列表?
答案 0 :(得分:28)
如何获取字段
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
的顺序排序。
另请注意,根据this page,facet已被Elasticsearch 1.0中的聚合所取代,它们是facet的超集。
答案 1 :(得分:24)
我认为你想要的是一个分面搜索。从文档中看一下这个例子:
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"} }
}
}
'
看看你是否可以根据自己的需要量身定做。
希望这有帮助, 马特
答案 2 :(得分:2)
另一个例子
请求
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
} ]
}
}
}
答案 3 :(得分: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
}
]
}
}
}
答案 4 :(得分:1)
检查现有字段值的最快方法:
GET myindex/mytype/<id>/_termvectors?fields=Product.Material.Code
myindex
= index mytype
= type <id>
=文件ID 答案 5 :(得分:0)
请使用以下代码从索引中的所有内容中仅获取“文章”字段值的列表。
卷曲'http://localhost:9200/my_index/_search?pretty=true&_source=articles'
它一定会对您有所帮助。
答案 6 :(得分:0)
我认为最佳方法是使用 elasticsearch聚合 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
}
}
}
}