2012-07-03 7 views
6

Cuando uso un analizador con edgengram (min = 3, max = 7, frente) + term_vector = with_positions_offsetsElasticsearch - EdgeNgram + resalte + term_vector = malos aspectos más destacados

con el documento que tiene texto = "CouchDB"

cuando la búsqueda de "Couc"

mi más destacado es el "CO" y no "Couc"


parece mi más destacado es única en el token coincidencia mínima "CO" w Aunque esperaría estar en el token exacto (si es posible) o al menos el token más largo encontrado.

Funciona bien sin analizar el texto con term_vector = with_positions_offsets

¿Cuál es el impacto de la eliminación de la term_vector = with_positions_offsets para perfomances?

+0

nadie tiene alguna solución o respuesta sobre el impacto de with_positions_offsets? –

Respuesta

8

Cuando establece term_vector=with_positions_offsets para un campo específico, significa que está almacenando el término vectores por documento, para ese campo.

Cuando se trata de resaltar, los vectores de términos le permiten usar el resaltador de vector rápido lucene, que es más rápido que el resaltador estándar. La razón es que el marcador estándar no tiene ninguna manera rápida de resaltar, ya que el índice no contiene suficiente información (posiciones y desplazamientos). Solo puede volver a analizar el contenido del campo, interceptar desplazamientos y posiciones y realizar resaltados según esa información. Esto puede llevar bastante tiempo, especialmente con campos de texto largos.

Al utilizar vectores de términos, tiene suficiente información y no necesita volver a analizar el texto. La desventaja es el tamaño del índice, que aumentará notablemente. Debo agregar que, dado que los vectores de términos de Lucene 4.2 están mejor comprimidos y almacenados de una manera optimizada. Y también está el nuevo PostingsHighlighter basado en la capacidad de almacenar compensaciones en la lista de publicaciones, que requiere incluso menos espacio.

elasticsearch utiliza automáticamente la mejor manera de resaltar según la información disponible. Si se almacenan vectores de términos, utilizará el marcador de vector rápido, de lo contrario, el estándar. Después de reindexar sin vectores de términos, el resaltado se realizará con el resaltador estándar. Será más lento, pero el índice será más pequeño.

En cuanto a los campos de ngram, el comportamiento descrito es extraño, ya que el marcador vectorial rápido debería tener un mejor soporte para los campos ngram, por lo que esperaría exactamente el resultado opuesto.

+0

Gracias, entonces sé que el impacto en el rendimiento ahora. Espero que alguien pueda explicar este comportamiento. ¿Quizás es porque la lógica de ngram también se aplica a la consulta de búsqueda, mientras que no debería? –

+1

No lo pensé, sí, tiene sentido. Por lo general, para los ngrams tiene una cadena de análisis diferente en el momento de la consulta, sin ngrams.De lo contrario, también haces ngrams de la consulta y obtienes mucho más resultados de lo esperado y comportamientos extraños. – javanna

+0

ok gracias, debería intentar eso;) –

4

Sé que esta pregunta es viejo, pero todavía no fue respondida completamente:

Hay otra opción que puede ceder el paso a un comportamiento tan extraño:

Usted tiene que fijar require_field_match a true si no desea que los otros resultados de los documentos influyan en el resaltado del documento actual, consulte: http://www.elasticsearch.org/guide/reference/api/search/highlighting/

+0

require_field_match solo trata de nombres de campos, no creo que se relacione con este caso. Me refiero a que si tiene una consulta en el campo de título y resalta el título y la descripción, los términos coincidentes en el campo de descripción no se resaltarán, aunque por defecto sí lo están. – javanna