Elastic Search: как увидеть проиндексированные данные

102

У меня была проблема с ElasticSearch и Rails, когда некоторые данные не индексировались должным образом из-за attr_protected. Где Elastic Search хранит проиндексированные данные? Было бы полезно проверить, неверны ли фактически проиндексированные данные.

Проверка сопоставления с Tire.index('models').mappingпомощью не помогает, поле указано.

Робин
источник

Ответы:

171

Вероятно, самый простой способ изучить кластер ElasticSearch - использовать elasticsearch-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команд стиля для Elasticsearch - это плагин Sense в Marvel. .

Он поставляется с выделением исходного текста, красивыми отступами и автозаполнением.

Примечание. Изначально Sense был автономным плагином для Chrome, но теперь он является частью проекта Marvel .

DrTech
источник
1
В случае, подобном случаю Робина, я думаю, достаточно просто проверить данные с помощью curl curl localhost:9200/my_index/_search?q=*&pretty- при условии, что в индексе есть ограниченный набор документов.
karmi
2
Спасибо, что порекомендовали плагин Sense. Это здорово выглядит.
Venkatesh Nannan
Плагин Sense для Chrome отлично подходит для использования REST API. и _head хорош для проверки!
Haywire
Спасибо, это было действительно полезно. Между прочим, синтаксис: ./bin/plugin install mobz / elasticsearch-head. т.е. вам не нужен дефис перед установкой.
Пол Бартлетт
40

Самый простой способ увидеть ваши проиндексированные данные - это просмотреть их в браузере. Никаких загрузок или установки не требуется.

Я предполагаю, что ваш хост elasticsearch 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чтобы увидеть свои данные:

введите описание изображения здесь

Ян Климо
источник
3
Спасибо, Ян, это именно то, что я искал.
ZedTuX
У меня просто вопрос, http://127.0.0.1:9200/products_development/_search?pretty=1показывает ли только образец данных? кажется, не все данные
svelandiag
1
Документы здесь утверждают , что результаты поиска по умолчанию для первых 10 документов (ищите hits.hits)
Jan Klimo
8
При этом вообще не отображаются проиндексированные данные. Он показывает только ваши исходные данные - то же самое, что и вы. Не отвечает на вопрос OP.
hackel
1
? Довольно, не нужно добавлять «= 1»
Шай Алон
5

Решение для агрегации

Решение проблемы путем группировки данных - в ответе 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
            }
         ]
      }
   }
   ....
notapatch
источник
4

Инструмент, который очень помогает мне отлаживать ElasticSearch, - это ElasticHQ . По сути, это HTML-файл с некоторым JavaScript. Не нужно никуда устанавливать, не говоря уже о самом ES: просто загрузите его, распакуйте int и откройте HTML-файл в браузере.

Не уверен, что это лучший инструмент для активных пользователей ES. Тем не менее, это действительно практично для тех, кто спешит посмотреть записи.

Brandizzi
источник
1

Следуя примеру @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'

koolhead17
источник
1

Кибана - тоже хорошее решение. Это платформа визуализации данных для Elastic. Если она установлена, она работает по умолчанию на порту 5601.

Из множества вещей, которые он предоставляет. В нем есть «Инструменты разработчика», где мы можем выполнять вашу отладку.

Например, вы можете проверить здесь свои доступные индексы, используя команду

GET /_cat/indices
gd vigneshwar
источник