Pourquoi Elasticsearch champ "non analysé" est divisé en termes?
J'ai le champ suivant dans ma définition de mappage:
...
"my_field": {
"type": "string",
"index":"not_analyzed"
}
...
Quand je l'indice de document avec la valeur de my_field = 'test-some-another'
cette valeur est divisée en 3 termes: test
, some
, another
.
Ce que je fais mal?
, j'ai créé l'index suivant:
curl -XPUT localhost:9200/my_index -d '{
"index": {
"settings": {
"number_of_shards": 5,
"number_of_replicas": 2
},
"mappings": {
"my_type": {
"_all": {
"enabled": false
},
"_source": {
"compressed": true
},
"properties": {
"my_field": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
}
}'
Ensuite, j'indexe le document suivant:
curl -XPOST localhost:9200/my_index/my_type -d '{
"my_field": "test-some-another"
}'
Ensuite, j'utilise le plugin https://github.com/jprante/elasticsearch-index-termlist avec L'API suivante:
curl -XGET localhost:9200/my_index/_termlist
Cela me donne ce qui suit réponse:
{"ok":true,"_shards":{"total":5,"successful":5,"failed":0},"terms": ["test","some","another"]}
2 réponses
Vérifiez que le mappage est réellement défini en exécutant:
curl localhost:9200/my_index/_mapping?pretty=true
La commande qui crée l'index semble incorrecte. Il ne devrait pas contenir "index" : {
en tant qu'élément racine. Essayez ceci:
curl -XPUT localhost:9200/my_index -d '{
"settings": {
"number_of_shards": 5,
"number_of_replicas": 2
},
"mappings": {
"my_type": {
"_all": {
"enabled": false
},
"_source": {
"compressed": true
},
"properties": {
"my_field": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
}'
Dans ElasticSearch, un champ est indexé lorsqu'il entre dans l'index inversé, la structure de données que lucene utilise pour fournir ses capacités de recherche en texte intégral. Si vous souhaitez effectuer une recherche sur un champ, vous devez l'indexer. Lorsque vous indexez un champ, vous pouvez décider si vous voulez l'indexer tel quel, ou si vous voulez l'analyser, ce qui signifie décider d'un tokenizer à appliquer à celui-ci, ce qui générera une liste de jetons (mots) et une liste de filtres de jetons pouvant modifier le champ généré jetons (même ajouter ou supprimer certains). La façon dont vous indexez un champ affecte la façon dont vous pouvez le rechercher. Si vous indexez un champ mais ne l'analysez pas, et que son texte est composé de plusieurs mots, vous pourrez trouver ce document uniquement à la recherche de ce texte spécifique exact, espaces inclus.
Vous pouvez avoir des Champs sur lesquels vous souhaitez uniquement rechercher, et ne jamais afficher: indexé et non stocké (par défaut dans lucene). Vous pouvez avoir des champs que vous souhaitez rechercher et également récupérer: indexé et stocké. Vous peut avoir des champs que vous ne voulez pas rechercher, mais vous voulez récupérer pour les afficher.