aws - ¿Por qué el campo "not_analyzed" de Elasticsearch está dividido en términos?
elasticsearch tutorial (2)
En ElasticSearch, un campo se indexa cuando va dentro del índice invertido, la estructura de datos que lucene utiliza para proporcionar sus capacidades de búsqueda de texto completo grandes y rápidas. Si desea buscar en un campo, debe indexarlo. Cuando indexa un campo, puede decidir si desea indexarlo tal como está, o si desea analizarlo, lo que significa decidir si un tokenizador se aplicará a él, lo que generará una lista de tokens (palabras) y una lista de tokens. filtros que pueden modificar los tokens generados (incluso agregar o eliminar algunos). La forma en que indexa un campo afecta cómo puede buscar en él. Si indexa un campo pero no lo analiza, y su texto está compuesto por varias palabras, podrá encontrar ese documento solo buscando ese texto específico exacto, incluidos los espacios en blanco.
Puede tener campos en los que solo desea buscar y nunca mostrar: indexados y no almacenados (predeterminado en lucene). Puede tener campos en los que quiera buscar y también recuperar: indexados y almacenados. Puede tener campos en los que no desea buscar, pero desea recuperarlos para mostrarlos.
Tengo el siguiente campo en mi definición de mapeo:
...
"my_field": {
"type": "string",
"index":"not_analyzed"
}
...
Cuando my_field = ''test-some-another''
un documento con el valor de my_field = ''test-some-another''
ese valor se divide en 3 términos: test
, some
, another
.
¿Qué estoy haciendo mal?
Creé el siguiente índice:
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"
}
}
}
}
}
}''
Luego indico el siguiente documento:
curl -XPOST localhost:9200/my_index/my_type -d ''{
"my_field": "test-some-another"
}''
Luego uso el complemento https://github.com/jprante/elasticsearch-index-termlist con la siguiente API: curl -XGET localhost:9200/my_index/_termlist
Eso me da la siguiente respuesta:
{"ok":true,"_shards":{"total":5,"successful":5,"failed":0},"terms": ["test","some","another"]}
Verifique que la asignación realmente se establece ejecutando:
curl localhost:9200/my_index/_mapping?pretty=true
El comando que crea el índice parece ser incorrecto. No debe contener "index" : {
como elemento raíz. Prueba esto:
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"
}
}
}
}
}''