elasticsearch
2012-05-14 167 views 21 likes 
21

tengo el siguiente campo en mi definición de asignación:¿Por qué el campo Elasticsearch "not_analyzed" se divide en términos?

... 
"my_field": { 
    "type": "string", 
    "index":"not_analyzed" 
} 
... 

Cuando índice I un documento con 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" 
      } 
     } 
     } 
    } 
    } 
}' 

Entonces índice del siguiente documento:

curl -XPOST localhost:9200/my_index/my_type -d '{ 
    "my_field": "test-some-another" 
}' 

Luego uso el plugin https://github.com/jprante/elasticsearch-index-termlist con la siguiente API: curl -XGET localhost:9200/my_index/_termlist que me da el siguiente respuesta:

{"ok":true,"_shards":{"total":5,"successful":5,"failed":0},"terms": ["test","some","another"]} 

+0

¿Puede agregar un ejemplo más detallado que demuestre el problema? ¿Cómo determinó que el test-some-another se divida en 3 términos? – imotov

+0

Modifiqué mi pregunta para responder la tuya. ¡Gracias por la rápida respuesta! – Georgi

Respuesta

22

Compruebe que la asignación es en realidad conseguir crear ejecutando:

curl localhost:9200/my_index/_mapping?pretty=true

El comando que crea el índice parece ser incorrecta. 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" 
     } 
     } 
    } 
    } 
}' 
+0

¡Gracias! Mi definición de mapeo se aplica ahora. – Georgi

4

En Elasticsearch un campo se indexa cuando va dentro del índice invertido, la estructura de datos que utiliza Lucene para proporcionar a sus grandes y rápidas capacidades de búsqueda de texto completo. 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 que sólo desea buscar en, y nunca espectáculo: un índice y no se almacenan (por defecto en Lucene). Puede tener los campos que desea buscar y también recuperar: indexados y almacenados. Puede tener campos en los que no desea buscar, pero desea recuperarlos para mostrarlos.

Cuestiones relacionadas