Еластичний пошук: як бачити індексовані дані


102

У мене виникли проблеми з ElasticSearch та Rails, де деякі дані не індексувалися належним чином через attr_protected. Де Elastic Search зберігає індексовані дані? Було б корисно перевірити, чи дійсні індексовані дані неправильні.

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

Відповіді:


170

Напевно, найпростіший спосіб дослідити свій кластер ElasticSearch - це використати еластичний пошук .

Ви можете встановити його, виконавши:

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 був окремим хромованим плагіном, але зараз є частиною проекту Marvel .


1
У такому випадку, як Робін, я думаю, що достатньо просто оглянути дані з завитком curl localhost:9200/my_index/_search?q=*&pretty- припускаючи, що в індексі обмежений набір документів.
karmi

2
Дякуємо, що рекомендували плагін Sense. Це виглядає чудово.
Venkatesh Nannan

Плагін Sense для хрому чудово підходить для використання API REST. і _head приємно для перевірки!
Haywire


Спасибі це було дуже корисно. Btw синтаксис є ./bin/plugin встановити mobz / elasticsearch-head. тобто дефіс перед установкою не потрібен.
Пол Бартлетт

40

Абсолютно найпростіший спосіб побачити ваші індексовані дані - це переглянути їх у своєму браузері. Не потрібно завантажувати або встановлювати.

Я припускаю, що ваш хостинг з еластичним пошуком є 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
Це зовсім не відображає індексованих даних. Він показує лише ваші вихідні дані - те саме, що ви ввели. Не відповідає на питання ОП.
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.

Грані замінюються агрегатами - представлені доступним чином у Посібнику з еластичних досліджень - що завантажує приклад в сенс. .

Коротке рішення

Рішення таке ж, за винятком того, що агрегація вимагає 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 для його перевірки - приклад індексу будинків із типом окупанта та полем імені_файла:

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
            }
         ]
      }
   }
   ....

4

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

Не впевнений, що це найкращий інструмент для ES важких користувачів. Тим не менш, це дійсно практично тому, хто поспішає побачити записи.



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'


1

Кібана також є хорошим рішенням. Це платформа візуалізації даних для Elastic.Якщо встановлена, вона працює за замовчуванням на порту 5601.

З багатьох речей, які він надає. У ньому є "Інструменти розробки", де ми можемо робити вашу налагодження.

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

GET /_cat/indices
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.