[Tutorial de back-end] ¿Qué puedo hacer si Elasticsearch puede recuperarlo, pero no se puede resaltar correctamente?

1. El problema lleva
al problema de combate en línea en el grupo WeChat:

Hermanos, en es:

El campo de tipo de palabra clave está resaltado, el valor es 123asd456, consulta sd4, el resultado resaltado es em 123asd456 em

¿Hay alguna manera de resaltar solo el sd4 que consulto?

Consulte claramente parte de la identificación, pero resalte que el resultado es la cadena de identificación completa, ¿qué debo hacer?

Deadpool Elasticsearch Technology Grupo WeChat

2. Una demostración describe el problema con claridad
Nota: El DSL de muestra en este artículo funciona bien en la versión 7.2, y las versiones anteriores antes de 6.X pueden requerir ajustes.

PUT findex
{
"asignaciones": {
"propiedades": {
"aname": {
"type": "text"
},
"acode": {
"type": "keyword"
}
}
}
}

POST findex / _bulk
{"index": {"_ id": 1}}
{"acode": "160213.OF", "aname": "X Tainasdaq 100"}
{"index": {"_ id ": 2}}
{" acode ":" 160218.OF "," aname ":" X Tailandia Certificate Real Estate "}

POST findex / _search
{
"resaltar": {
"campos": {
"acode": {}
}
},
"consulta": {
"bool": {
"debería": [
{
"comodín": {
"acode": " 1602
}
}
]
}
}
}
Resalte los resultados de búsqueda,

"
Highlight ": { "acode": [
" 160213.OF "
]
}
Es decir, toda la cadena está resaltada y no cumple con las expectativas.

Demanda real: búsqueda 1602, datos relevantes: 160213.O, 160218.OF pueden recuperarse, y solo se resalta el campo de búsqueda 1602.

3. Desmontaje del problema La
recuperación y selección del comodín es para resolver el problema de la coincidencia de subcadenas La implementación del comodín es similar a la coincidencia difusa "like" de mysql.
Los separadores de palabras estándar de texto tradicionales, incluidos el separador de palabras chino ik, el separador de palabras en inglés inglés, estándar, etc., no pueden resolver el problema de coincidencia de subcadenas anterior.
Y las necesidades comerciales reales:

Por un lado: se requiere la subcadena de entrada para recuperar la cadena completa;

Por otro lado: es necesario resaltar la subcadena buscada.

¡Solo un tipo de participio Ngram puede ser reemplazado!

4. ¿Qué es Ngram?
4.1 Definición de
Ngram Ngram es un algoritmo basado en un modelo de lenguaje estadístico.

La idea básica de Ngram es realizar una operación de ventana deslizante de tamaño N en bytes del contenido del texto para formar una secuencia de fragmentos de bytes de longitud N. Cada segmento de byte se denomina gramo, que cuenta la frecuencia de aparición de todos los gramos y filtros de acuerdo con un umbral preestablecido para formar una lista de gramos clave, que es el espacio de función vectorial de este texto. Gram es una dimensión vectorial de características.

El modelo se basa en el supuesto de que la aparición de la enésima palabra solo está relacionada con las palabras N-1 anteriores, pero no con ninguna otra palabra. La probabilidad de la oración completa es el producto de la probabilidad de aparición de cada palabra.

Estas probabilidades se pueden obtener contando directamente el número de ocurrencias simultáneas de N palabras del corpus. Comúnmente se usan binario Gram binario (gramática binaria) y ternario Tri-gramo (gramática ternaria).

4.2 Ejemplo de
oración en chino de Ngram : "¿Has comido hoy?" Su resultado de segmentación de palabras de Bi-Gram (gramática binaria) es:

Hoy en día se
hoy
día para comer
la cena
comida
todavía
4.3 Ngram escenarios
Escenario 1: texto compresa, comprobar si hay errores de ortografía, acelerar la cadena de búsqueda, documentos de identificación idioma.
Escenario 2: Nuevas aplicaciones en el campo de la automatización del procesamiento del lenguaje natural, como la clasificación automática, la indexación automática, la generación automática de hipervínculos, la recuperación de documentos y la segmentación del texto del lenguaje sin separadores.
Escena 3: Función de clasificación automática del lenguaje natural. En correspondencia con la búsqueda de Elasticsearch, el escenario de la aplicación es más claro: la segmentación de palabras sin texto delimitador del idioma mejora la eficiencia de la búsqueda (en comparación con: consulta comodín y consulta regular).
5. Practique un
PUT findex_ext
{
"configuración": {
"index.max_ngram_diff": 10,
"análisis": {
"analizador": {
"my_analyzer": {
"tokenizer": "my_tokenizer"
}
},
"tokenizer": {
“My_tokenizer”: {
“type”: “ngram”,
“min_gram”: 4,
“max_gram”: 10,
“token_chars”: [
“letter”,
“digit”
]
}
}
}
},
"Asignaciones": {
"propiedades": {
"nombre": {
"tipo": "texto"
},
"acode": {
"tipo": "texto",
"analizador": "mi_analizador" ,
"Campos": {
"palabra clave": {
"tipo": "palabra clave"
}
}
}
}
}
}

POST findex_ext / _bulk
{"index": {"_ id": 1}}
{"acode": "160213.OF", "aname": "X Tainasdaq 100"}
{"index": {"_ id ": 2}}
{" acode ":" 160218.OF "," aname ":" X Tailandia Certificate Real Estate "}

Ver resultados de segmentación de palabras

POST findex_ext / _analyze
{
"analizador": "my_analyzer",
"texto": "160213.OF"
}

POST findex_ext / _search
{
"resaltar": {
"campos": {
"acode": {}
}
},
"consulta": {
"bool": {
"debería": [
{
"match_phrase": {
"acode": {
"Consulta": "1602"
}
}
}
]
}
}
}
Nota: Tres parámetros básicos

min_gram: la longitud mínima de caracteres (segmentación), el valor predeterminado es 1
max_gram: la longitud máxima de caracteres (segmentación), el valor predeterminado es 2
token_chars: los tipos de caracteres incluidos en los resultados de segmentación de palabras generados, el valor predeterminado es todos los tipos. Como se muestra en el ejemplo anterior: conserve números y letras. Si solo se especifica "letra" en el ejemplo anterior, los números se filtrarán y solo los caracteres de la cadena como "OF" quedarán en el resultado de la segmentación de palabras.
El fragmento del resultado devuelto es el siguiente:

"highlight" : {
      "acode" : [
        "<em>1602</em>13.OF"
      ]
    }

Ya puede satisfacer las necesidades duales de recuperación y resaltado.

5.
Seleccione el tipo y preste atención a la esencia de Ngram: use el espacio para el tiempo. La premisa de su coincidencia es que se ha escrito de acuerdo con min_gram y max_gram al escribir.
La cantidad de datos es muy pequeña y no se requiere resaltar subcadenas, puede considerar la palabra clave.
La cantidad de datos es grande y la subcadena está resaltada. Se recomienda utilizar: segmentación de palabras Ngram combinada con la recuperación de match o match_phrase.
Gran cantidad de datos, recuerde no utilizar la coincidencia de prefijos comodín.
Motivo: ¡DFA (Autómata finito determinista) construido con un patrón con comodines puede ser complicado y costoso! Incluso puede causar la caída del entorno en línea.
El tío Wood también enfatizó muchas veces: la consulta con comodines debe evitar el uso de comodines como punto de partida. Si tiene que hacer esto, debe limitar la longitud de la cadena ingresada por el usuario.
6. Resumen Con el
fin de discutir y resolver problemas en línea, se amplían los principios y la lógica de uso de Ngram, y se señalan los escenarios empresariales aplicables de comodín y Ngram. ¡Espero inspirarte y ayudarte en el combate real!

¿Encuentra coincidencias de subcadenas y resaltado en su negocio? ¿Cómo segmentar y buscar? Bienvenido a dejar un mensaje para discutir.

Recomendación de servicio

Publicado 0 artículos originales · me gusta 0 · visitas 356

Supongo que te gusta

Origin blog.csdn.net/weixin_47143210/article/details/105628365
Recomendado
Clasificación