stored specify sort script_fields query includes fields sorting elasticsearch elastica

sorting - specify - ¿Cómo ordenar en campo analizado/tokenizado en Elasticsearch?



select elasticsearch (1)

Puede usar el concepto integrado de Tipo de campo múltiple en Elasticsearch.

El tipo multi_field permite mapear varios core_types del mismo valor. Esto puede ser muy útil, por ejemplo, cuando se quiere asignar un tipo de cadena, una vez cuando se analiza y una vez cuando no se analiza.

En la Referencia de Elasticsearch, consulte la guía Clasificar cadenas y Campos múltiples sobre cómo configurar lo que necesita.

Tenga en cuenta que la configuración de asignación de campos múltiples ha cambiado entre Elasticsearch 0.90.X y 1.X. Use la siguiente guía apropiada según su versión:

Estamos almacenando un campo de title en nuestro índice y queremos usar el campo para dos propósitos:

  1. Estamos analizando con un filtro de ngram para que podamos proporcionar resultados automáticos e instantáneos
  2. Queremos ser capaces de enumerar los resultados utilizando una ordenación ASC en el campo de title lugar de la puntuación.

El índice / filtro / analizador se define así:

array( ''number_of_shards'' => $this->shards, ''number_of_replicas'' => $this->replicas, ''analysis'' => array( ''filter'' => array( ''nGram_filter'' => array( ''type'' => ''nGram'', ''min_gram'' => 2, ''max_gram'' => 20, ''token_chars'' => array(''letter'',''digit'',''punctuation'',''symbol'') ) ), ''analyzer'' => array( ''index_analyzer'' => array( ''type'' => ''custom'', ''tokenizer'' =>''whitespace'', ''char_filter'' => ''html_strip'', ''filter'' => array(''lowercase'',''asciifolding'',''nGram_filter'') ), ''search_analyzer'' => array( ''type'' => ''custom'', ''tokenizer'' =>''whitespace'', ''char_filter'' => ''html_strip'', ''filter'' => array(''lowercase'',''asciifolding'') ) ) ) ),

El problema que estamos experimentando es resultados impredecibles cuando ordenamos en el campo de title . Después de hacer una pequeña búsqueda, encontramos esto al final de la página del manual de sort en ElasticSearch ... ( http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-sort.html #_memory_considerations )

Para los tipos basados ​​en cadenas, el campo ordenado no debe ser analizado / tokenizado.

¿Cómo podemos analizar el campo y clasificarlo más tarde? ¿Necesitamos almacenar el campo dos veces con uno usando not_analyzed para ordenar? Dado que la _source campo también está almacenando el valor del title en su estado original, ¿no se puede usar para ordenar?