Elastyczne wyszukiwanie: jak wyświetlić zindeksowane dane

102

Miałem problem z ElasticSearch i Railsami, gdzie niektóre dane nie były poprawnie indeksowane z powodu attr_protected. Gdzie Elastic Search przechowuje zindeksowane dane? Warto byłoby sprawdzić, czy rzeczywiste indeksowane dane są nieprawidłowe.

Sprawdzanie mapowania za Tire.index('models').mappingpomocą nie pomaga, pole jest wymienione.

Rudzik
źródło

Odpowiedzi:

171

Prawdopodobnie najłatwiejszym sposobem eksploracji klastra ElasticSearch jest użycie elasticsearch-head .

Możesz go zainstalować, wykonując:

cd elasticsearch/
./bin/plugin -install mobz/elasticsearch-head

Następnie (zakładając, że ElasticSearch jest już uruchomiony na twoim komputerze lokalnym), otwórz okno przeglądarki, aby:

http://localhost:9200/_plugin/head/

Alternatywnie możesz po prostu użyć curlz wiersza poleceń, np:

Sprawdź mapowanie indeksu:

curl -XGET 'http://127.0.0.1:9200/my_index/_mapping?pretty=1' 

Pobierz przykładowe dokumenty:

curl -XGET 'http://127.0.0.1:9200/my_index/_search?pretty=1' 

Zobacz rzeczywiste terminy przechowywane w określonym polu (tj. Jak to pole zostało przeanalizowane):

curl -XGET 'http://127.0.0.1:9200/my_index/_search?pretty=1'  -d '
 {
    "facets" : {
       "my_terms" : {
          "terms" : {
             "size" : 50,
             "field" : "foo"
          }
       }
    }
 }

Więcej dostępnych tutaj: http://www.elasticsearch.org/guide

AKTUALIZACJA: Wtyczka Sense w Marvel

Zdecydowanie najłatwiejszym sposobem pisania curlpoleceń w stylu Elasticsearch jest wtyczka Sense w Marvelu .

Pochodzi z podświetlaniem źródła, ładnymi wcięciami i autouzupełnianiem.

Uwaga: Sense był pierwotnie samodzielną wtyczką Chrome, ale teraz jest częścią projektu Marvel .

DrTech
źródło
1
W przypadku takim jak Robin myślę, że wystarczy sprawdzić dane za pomocą curl curl localhost:9200/my_index/_search?q=*&pretty- zakładając, że w indeksie znajduje się ograniczony zestaw dokumentów.
karmi
2
Dziękujemy za polecenie wtyczki Sense. Wygląda świetnie.
Venkatesh Nannan
Wtyczka Sense dla Chrome doskonale nadaje się do korzystania z REST API. a _head jest przydatny do sprawdzania!
Haywire,
Dzięki temu było to naprawdę przydatne. Przy okazji składnia to ./bin/plugin install mobz / flexiblesearch-head. tzn. nie potrzebujesz łącznika przed instalacją.
Paul Bartlett
40

Absolutnie najłatwiejszym sposobem wyświetlenia zindeksowanych danych jest wyświetlenie ich w przeglądarce. Bez pobierania ani instalacji.

Zakładam, że twoim hostem jest http://127.0.0.1:9200.

Krok 1

Przejdź do, http://127.0.0.1:9200/_cat/indices?vaby wyświetlić swoje indeksy. Zobaczysz coś takiego:

wprowadź opis obrazu tutaj

Krok 2

Spróbuj uzyskać dostęp do żądanego indeksu: http://127.0.0.1:9200/products_development_20160517164519304

Wynik będzie wyglądał mniej więcej tak:

wprowadź opis obrazu tutaj

Zwróć uwagę na aliases, co oznacza, że ​​możemy równie dobrze uzyskać dostęp do indeksu pod adresem: http://127.0.0.1:9200/products_development

Krok 3

Przejdź do, http://127.0.0.1:9200/products_development/_search?prettyaby zobaczyć swoje dane:

wprowadź opis obrazu tutaj

Jan Klimo
źródło
3
Dziękuję Jan, właśnie tego szukałem.
ZedTuX
Mam tylko pytanie, czy http://127.0.0.1:9200/products_development/_search?pretty=1pokazuje tylko przykładowe dane? wydaje się, że nie pokazuje wszystkich danych
svelandiag
1
Dokumenty tutaj stwierdzają, że wyniki wyszukiwania domyślnie dotyczą pierwszych 10 dokumentów (szukaj hits.hits)
Jan Klimo
8
To w ogóle nie pokazuje zindeksowanych danych. Pokazuje tylko dane źródłowe - to samo, co umieściłeś. Nie odpowiada na pytanie PO.
hackel
1
wystarczy ładny, nie ma potrzeby dodawania „= 1”
Shai Alon,
5

Rozwiązanie agregacji

Rozwiązanie problemu poprzez grupowanie danych - odpowiedź DrTech wykorzystywała aspekty zarządzania tym, ale będzie przestarzała zgodnie z odniesieniem do Elasticsearch 1.0.

Warning

Facets are deprecated and will be removed in a future release. You are encouraged to
migrate to aggregations instead.

Aspekty są zastępowane przez agregaty - wprowadzone w przystępny sposób w Elasticsearch Guide - co ładuje przykład w sensowny sposób. .

Krótkie rozwiązanie

Rozwiązanie jest takie samo, z wyjątkiem tego, że agregacje wymagają aggszamiast facetsi z liczbą 0, która ustawia limit na maksymalną liczbę całkowitą - przykładowy kod wymaga wtyczki 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
            }
        }
    }
}

Pełne rozwiązanie

Oto kod Sense do przetestowania - przykład indeksu domów, z typem lokatora i polem 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
            }
        }
    }
}

Odpowiedź

Odpowiedź pokazująca odpowiedni kod agregacji. Z dwoma kluczami w indeksie: John i Mark.

    ....
    "aggregations": {
      "indexed_occupier_names": {
         "buckets": [
            {
               "key": "john",     
               "doc_count": 2     <= 2 documents matching
            },                        
            {
               "key": "mark",
               "doc_count": 1     <= 1 document matching
            }
         ]
      }
   }
   ....
notapatch
źródło
4

Narzędziem, które bardzo mi pomaga w debugowaniu ElasticSearch, jest ElasticHQ . Zasadniczo jest to plik HTML z pewną ilością JavaScript. Nie trzeba nigdzie instalować, nie mówiąc już o samym ES: wystarczy go pobrać, rozpakować plik int i otworzyć plik HTML w przeglądarce.

Nie jestem pewien, czy jest to najlepsze narzędzie dla ciężkich użytkowników ES. Jednak jest to naprawdę praktyczne dla każdego, kto się spieszy, aby zobaczyć wpisy.

brandizzi
źródło
1

Zgodnie z przykładem @JanKlimo, na terminalu wszystko, co musisz zrobić, to:

aby zobaczyć cały indeks: $ curl -XGET 'http://127.0.0.1:9200/_cat/indices?v'

aby zobaczyć zawartość indeksu products_development_20160517164519304: $ curl -XGET 'http://127.0.0.1:9200/products_development_20160517164519304/_search?pretty=1'

koolhead17
źródło
1

Kibana to również dobre rozwiązanie. Jest to platforma do wizualizacji danych dla Elastic, która po zainstalowaniu działa domyślnie na porcie 5601.

Z wielu rzeczy, które zapewnia. Zawiera "Dev Tools", gdzie możemy przeprowadzić debugowanie.

Na przykład możesz sprawdzić tutaj dostępne indeksy za pomocą polecenia

GET /_cat/indices
gd vigneshwar
źródło