Recherche élastique: comment voir les données indexées
j'ai eu un problème avec ElasticSearch et Rails, où certaines données n'ont pas été indexées correctement en raison de attr_protected. Où la recherche élastique stocke-t-elle les données indexées? Il serait utile de vérifier si les données indexées est faux.
vérifier la correspondance avec Tire.index('models').mapping
n'aide pas, le champ est listé.
7 réponses
probablement la façon la plus facile d'explorer votre cluster ElasticSearch est d'utiliser elasticsearch-head .
Vous pouvez l'installer en faisant:
cd elasticsearch/
./bin/plugin -install mobz/elasticsearch-head
ensuite (en supposant que ElasticSearch est déjà en cours d'exécution sur votre machine locale), ouvrez une fenêtre de navigateur à:
http://localhost:9200/_plugin/head/
alternativement, vous pouvez juste utiliser curl
de la ligne de commande, par exemple:
vérifier la cartographie pour un index:
curl -XGET 'http://127.0.0.1:9200/my_index/_mapping?pretty=1'
Obtenir quelques exemples de documents:
curl -XGET 'http://127.0.0.1:9200/my_index/_search?pretty=1'
voir les termes réels stockés dans un champ particulier (c'est-à-dire comment ce champ a été analysé):
curl -XGET 'http://127.0.0.1:9200/my_index/_search?pretty=1' -d '
{
"facets" : {
"my_terms" : {
"terms" : {
"size" : 50,
"field" : "foo"
}
}
}
}
plus disponible ici: http://www.elasticsearch.org/guide
mise à jour: plugin sens dans Marvel
de loin la la manière la plus facile d'écrire les commandes curl
pour Elasticsearch est le plugin sens dans Marvel .
il est livré avec la mise en évidence de la source, assez indent et autocomplete.
Note: Sense était à l'origine un plugin de chrome autonome, mais fait maintenant partie du projet Marvel .
Absolument la meilleure façon de voir vos données indexées est pour l'afficher dans votre navigateur. Aucun téléchargement ou installation nécessaire.
je vais supposer que votre hôte elasticsearch est http://127.0.0.1:9200
.
Étape 1
naviguez vers http://127.0.0.1:9200/_cat/indices?v
pour lister vos indices. Vous verrez quelque chose comme ceci:
Étape 2
essayez d'accéder à l'index désiré:
http://127.0.0.1:9200/products_development_20160517164519304
la sortie ressemblera à quelque chose comme ceci:
Notez le aliases
, ce qui signifie que nous pouvons aussi bien Accéder à l'index à:
http://127.0.0.1:9200/products_development
Étape 3
http://127.0.0.1:9200/products_development/_search?pretty=1
pour voir vos données:
ElasticSearch le navigateur de données
recherche, graphiques, configuration en un clic....
Agrégation Solution
résoudre le problème en groupant les données - la réponse de DrTech facettes utilisées dans la gestion de ce, mais, sera déprécié selon la référence Elasticsearch 1.0.
Warning
Facets are deprecated and will be removed in a future release. You are encouraged to
migrate to aggregations instead.
Les facettes sont remplacées par des agrégats - introduits d'une manière accessible dans le guide Elasticsearch - qui chargent un exemple dans le sens. .
Solution Courte
la solution est la même sauf les agrégations exigent aggs
au lieu de facets
et avec un compte de 0 qui fixe la limite à l'entier max - le code d'exemple exige le Plugin 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
}
}
}
}
Solution Complète
voici le code sens pour le tester - exemple d'un index de maisons, avec un type d'occupant, et un champ 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
}
}
}
}
Réponse
Réponseindiquant le code d'agrégation pertinent. Avec deux clés dans l'index, John et Mark.
....
"aggregations": {
"indexed_occupier_names": {
"buckets": [
{
"key": "john",
"doc_count": 2 <= 2 documents matching
},
{
"key": "mark",
"doc_count": 1 <= 1 document matching
}
]
}
}
....
un outil qui m'aide beaucoup à déboguer ElasticSearch est ElasticHQ . Fondamentalement, c'est un fichier HTML avec du JavaScript. Pas besoin d'installer n'importe où, encore moins en soi: il suffit de le télécharger, décompresser int et ouvrir le fichier HTML avec un navigateur.
pas sûr que ce soit le meilleur outil pour les utilisateurs lourds. Pourtant, c'est vraiment pratique pour celui qui est pressé de voir les entrées.
si vous utilisez Google Chrome alors vous pouvez simplement utiliser cette extension nommée as Sense il s'agit également d'un outil si vous utilisez Marvel.
https://chrome.google.com/webstore/detail/sense-beta/lhjgkmllcaadmopgmanpapmpjgmfcfig
suivant L'exemple de @JanKlimo, sur terminal Tout ce que vous avez à faire est:
pour voir tous les indices:
$ curl -XGET 'http://127.0.0.1:9200/_cat/indices?v'
pour voir contenu de L'Index products_development_20160517164519304
:
$ curl -XGET 'http://127.0.0.1:9200/products_development_20160517164519304/_search?pretty=1'