Можно ли запросить для всех значений конкретное поле? Скажем, у меня есть "статьи", и у каждой статьи есть автор, могу ли я выполнить запрос, чтобы найти список всех авторов?
Elasticsearch - получить все значения для заданного поля?
Ответ 1
Я думаю, что вы хотите, это фасетный поиск. Взгляните на этот пример из документации:
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"} }
}
}
'
Посмотрите, можете ли вы адаптировать это для работы.
Надеюсь, это поможет, Matt
Ответ 2
Как получить все возможные значения для
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, которые являются надмножеством фасетов.
Ответ 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
} ]
}
}
}
Ответ 4
Вы не упомянули версию 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
}
}
}
}
}
}
и пример Response:
"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
}
]
}
}
}
Ответ 5
Самый быстрый способ проверки существующих значений полей:
GET myindex/mytype/<id>/_termvectors?fields=Product.Material.Code
-
myindex
= index -
mytype
= тип -
<id>
= document id
Ответ 6
Пожалуйста, используйте код ниже, чтобы получить только список значений полей "статей" из всего содержимого в индексе.
curl ' http://localhost: 9200/my_index/_search? pretty = true & _source = article '
Это обязательно поможет вам.