Упругий поиск: как увидеть индексированные данные

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

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

Ответ 1

Вероятно, самый простой способ изучить ваш кластер 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

UPDATE: плагин Sense в Marvel

Самым простым способом написания команд curl -style для Elasticsearch является Sense plugin in Marvel.

Он поставляется с подсветкой источника, довольно отступом и автозаполнением.

Примечание: Смысл был первоначально автономным хром-плагином, но теперь является частью проекта Marvel.

Ответ 2

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

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

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

Ответ 4

Агрегатное решение

Решение проблемы путем группировки данных - 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 Guide, которое загружает пример в смысл..

Краткое решение

Решение такое же, за исключением того, что для агрегации требуется aggs вместо facets и с count of 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
            }
         ]
      }
   }
   ....

Ответ 5

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

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

Ответ 7

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