Эластичный поиск: как посмотреть проиндексированные данные
У меня была проблема с ElasticSearch и Rails, где некоторые данные не были правильно проиндексированы из-за attr_protected. Где Elastic Search хранит проиндексированные данные? Было бы полезно проверить, являются ли фактические проиндексированные данные неправильными.
Проверка соответствия с Tire.index('models').mapping
не помогает, поле указано.
7 ответов
Вероятно, самый простой способ исследовать ваш кластер ElasticSearch - это использовать asticsearch -head.
Вы можете установить его, выполнив:
cd elasticsearch/
./bin/plugin -install mobz/elasticsearch-head
Затем (при условии, что ElasticSearch уже запущен на вашем локальном компьютере), откройте окно браузера, чтобы:
http://localhost:9200/_plugin/head/
Кроме того, вы можете просто использовать curl
из командной строки, например:
Проверьте сопоставление для индекса:
curl -XGET 'http://127.0.0.1:9200/my_index/_mapping?pretty=1'
Получите несколько образцов документов:
curl -XGET 'http://127.0.0.1:9200/my_index/_search?pretty=1'
Посмотрите фактические термины, хранящиеся в определенном поле (например, как это поле было проанализировано):
curl -XGET 'http://127.0.0.1:9200/my_index/_search?pretty=1' -d '
{
"facets" : {
"my_terms" : {
"terms" : {
"size" : 50,
"field" : "foo"
}
}
}
}
Более доступно здесь: http://www.elasticsearch.org/guide
ОБНОВЛЕНИЕ: плагин Sense в Marvel
Безусловно, самый простой способ написания curl
-style команд для Elasticsearch - это плагин Sense в Marvel.
Это идет с подсвечиванием источника, хорошим отступом и автозаполнением.
Примечание. Изначально Sense был отдельным плагином для Chrome, но теперь является частью проекта Marvel.
Абсолютно самый простой способ увидеть ваши проиндексированные данные - это просмотреть их в браузере. Нет загрузки или установки не требуется.
Я собираюсь предположить, что ваш хозяин эластичный поиск http://127.0.0.1:9200
,
Шаг 1
Перейдите к http://127.0.0.1:9200/_cat/indices?v
перечислить ваши индексы. Вы увидите что-то вроде этого:
Шаг 2
Попробуйте получить доступ к нужному индексу:http://127.0.0.1:9200/products_development_20160517164519304
Вывод будет выглядеть примерно так:
Обратите внимание на aliases
Это означает, что мы можем также получить доступ к индексу по адресу:http://127.0.0.1:9200/products_development
Шаг 3
Перейдите к http://127.0.0.1:9200/products_development/_search?pretty=1
чтобы увидеть ваши данные:
Поиск, графики, установка в один клик....
Агрегационный раствор
Решение проблемы путем группировки данных - в ответе DrTech использовались аспекты управления этим, но он будет устаревшим в соответствии со ссылкой на Elasticsearch 1.0.
Warning
Facets are deprecated and will be removed in a future release. You are encouraged to
migrate to aggregations instead.
Фасеты заменяются агрегатами - введены в доступной форме в Руководстве Elasticsearch - что загружает пример в смысл.,
Краткое решение
Решение такое же, за исключением агрегации aggs
вместо facets
и со счетчиком 0, который устанавливает ограничение на максимальное целое число - пример кода требует плагин Marvel
# Basic aggregation
GET /houses/occupier/_search?search_type=count
{
"aggs" : {
"indexed_occupier_names" : { <= Whatever you want this to be
"terms" : {
"field" : "first_name", <= Name of the field you want to aggregate
"size" : 0
}
}
}
}
Полное решение
Вот код Sense, чтобы проверить это - пример индекса домов, с типом оккупанта и полем first_name:
DELETE /houses
# Index example docs
POST /houses/occupier/_bulk
{ "index": {}}
{ "first_name": "john" }
{ "index": {}}
{ "first_name": "john" }
{ "index": {}}
{ "first_name": "mark" }
# Basic aggregation
GET /houses/occupier/_search?search_type=count
{
"aggs" : {
"indexed_occupier_names" : {
"terms" : {
"field" : "first_name",
"size" : 0
}
}
}
}
отклик
Ответ с указанием соответствующего кода агрегации. С двумя ключами в индексе Джон и Марк.
....
"aggregations": {
"indexed_occupier_names": {
"buckets": [
{
"key": "john",
"doc_count": 2 <= 2 documents matching
},
{
"key": "mark",
"doc_count": 1 <= 1 document matching
}
]
}
}
....
ElasticHQ - инструмент, который мне очень помогает для отладки ElasticSearch. По сути, это HTML-файл с некоторым JavaScript. Не нужно никуда устанавливать, не говоря уже о самой ES: просто скачайте его, разархивируйте int и откройте HTML-файл в браузере.
Не уверен, что это лучший инструмент для тяжелых пользователей ES. Тем не менее, это действительно практично для тех, кто спешит увидеть записи.
Кибана также является хорошим решением. Это платформа визуализации данных для Elastic. Если она установлена, она по умолчанию работает на порту 5601.
Из многих вещей, которые он предоставляет. В нем есть "Инструменты разработчика", где мы можем выполнить вашу отладку.
Например, вы можете проверить доступные индексы здесь, используя команду
GET /_cat/indices
Если вы используете Google Chrome, то вы можете просто использовать это расширение с именем Sense, это также инструмент, если вы используете Marvel.
https://chrome.google.com/webstore/detail/sense-beta/lhjgkmllcaadmopgmanpapmpjgmfcfig
Следуя примеру @JanKlimo, на терминале все, что вам нужно сделать, это:
чтобы увидеть весь индекс:
$ curl -XGET 'http://127.0.0.1:9200/_cat/indices?v'
чтобы увидеть содержание индекса products_development_20160517164519304
:
$ curl -XGET 'http://127.0.0.1:9200/products_development_20160517164519304/_search?pretty=1'