Elastic Search: como ver os dados indexados

102

Tive um problema com ElasticSearch e Rails, onde alguns dados não foram indexados corretamente por causa de attr_protected. Onde o Elastic Search armazena os dados indexados? Seria útil verificar se os dados indexados reais estão errados.

Verificar o mapeamento com Tire.index('models').mappingnão ajuda, o campo está listado.

Robin
fonte

Respostas:

171

Provavelmente, a maneira mais fácil de explorar seu cluster ElasticSearch é usar elasticsearch-head .

Você pode instalá-lo fazendo:

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

Então (supondo que ElasticSearch já esteja em execução em sua máquina local), abra uma janela do navegador para:

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

Como alternativa, você pode usar apenas a curlpartir da linha de comando, por exemplo:

Verifique o mapeamento de um índice:

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

Obtenha alguns exemplos de documentos:

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

Veja os termos reais armazenados em um determinado campo (ou seja, como esse campo foi analisado):

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

Mais disponível aqui: http://www.elasticsearch.org/guide

ATUALIZAÇÃO: plugin Sense na Marvel

De longe, a maneira mais fácil de escrever curlcomandos de estilo para Elasticsearch é o plugin Sense no Marvel .

Ele vem com destaque de fonte, recuo bonito e autocompletar.

Nota: Sense era originalmente um plugin do Chrome independente, mas agora faz parte do projeto Marvel .

DrTech
fonte
1
No caso de Robin, acho que é o suficiente apenas inspecionar os dados com curl curl localhost:9200/my_index/_search?q=*&pretty- supondo que haja um conjunto limitado de documentos no índice.
karmi
2
Obrigado por recomendar o plugin Sense. Parece ótimo.
Venkatesh Nannan de
O plug-in Sense para Chrome é ótimo para usar a API REST. e _head é bom para fins de verificação!
Haywire
Obrigado, isso foi realmente útil. A propósito, a sintaxe é ./bin/plugin install mobz / elasticsearch-head. ou seja, você não precisa do hífen antes da instalação.
Paul Bartlett de
40

Com certeza, a maneira mais fácil de ver seus dados indexados é visualizá-los em seu navegador. Nenhum download ou instalação necessária.

Vou assumir que o seu host elasticsearch é http://127.0.0.1:9200.

Passo 1

Navegue até http://127.0.0.1:9200/_cat/indices?vpara listar seus índices. Você verá algo assim:

insira a descrição da imagem aqui

Passo 2

Tente acessar o índice desejado: http://127.0.0.1:9200/products_development_20160517164519304

A saída será semelhante a esta:

insira a descrição da imagem aqui

Observe o aliases, o que significa que também podemos acessar o índice em: http://127.0.0.1:9200/products_development

etapa 3

Navegue até http://127.0.0.1:9200/products_development/_search?prettypara ver seus dados:

insira a descrição da imagem aqui

Jan Klimo
fonte
3
Obrigado Jan, é exatamente o que eu estava procurando.
ZedTuX
Só tenho uma pergunta, http://127.0.0.1:9200/products_development/_search?pretty=1mostra apenas dados de amostra? não parece mostrar todos os dados
svelandiag
1
Os documentos aqui afirmam que os resultados da pesquisa são padronizados para os 10 primeiros documentos (procure hits.hits)
Jan Klimo
8
Isso não mostra os dados indexados. Mostra apenas seus dados de origem - exatamente a mesma coisa que você inseriu. Não responde à pergunta de OPs.
hackel
1
? bonito é o suficiente, não há necessidade de adicionar "= 1"
Shai Alon
5

Solução de agregação

Resolvendo o problema agrupando os dados - a resposta da DrTech usou facetas no gerenciamento disso, mas será descontinuada de acordo com a referência do Elasticsearch 1.0.

Warning

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

As facetas são substituídas por agregados - Introduzido de maneira acessível no Guia Elasticsearch - que carrega um exemplo com sentido. .

Solução Curta

A solução é a mesma, exceto que as agregações requerem em aggsvez de facetse com uma contagem de 0 que define o limite para o número inteiro máximo - o código de exemplo requer o plug-in 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
            }
        }
    }
}

Solução Completa

Aqui está o código Sense para testá-lo - exemplo de um índice de casas, com um tipo de ocupação e um campo 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
            }
        }
    }
}

Resposta

Resposta mostrando o código de agregação relevante. Com duas chaves no índice, John e Mark.

    ....
    "aggregations": {
      "indexed_occupier_names": {
         "buckets": [
            {
               "key": "john",     
               "doc_count": 2     <= 2 documents matching
            },                        
            {
               "key": "mark",
               "doc_count": 1     <= 1 document matching
            }
         ]
      }
   }
   ....
notapatch
fonte
4

Uma ferramenta que me ajuda muito para depurar o ElasticSearch é o ElasticHQ . Basicamente, é um arquivo HTML com algum JavaScript. Não há necessidade de instalar em nenhum lugar, muito menos no próprio ES: basta fazer o download, descompactar o int e abrir o arquivo HTML com um navegador.

Não tenho certeza se é a melhor ferramenta para usuários pesados ​​do ES. Ainda assim, é muito prático para quem tem pressa em ver as inscrições.

Brandizzi
fonte
1

Seguindo o exemplo de @JanKlimo, no terminal, tudo o que você precisa fazer é:

para ver todo o índice: $ curl -XGET 'http://127.0.0.1:9200/_cat/indices?v'

para ver o conteúdo do índice products_development_20160517164519304: $ curl -XGET 'http://127.0.0.1:9200/products_development_20160517164519304/_search?pretty=1'

koolhead17
fonte
1

Kibana também é uma boa solução. É uma plataforma de visualização de dados para Elastic. Se instalado, é executado por padrão na porta 5601.

Das muitas coisas que ele fornece. Possui "Dev Tools" onde podemos fazer sua depuração.

Por exemplo, você pode verificar seus índices disponíveis aqui usando o comando

GET /_cat/indices
gd vigneshwar
fonte