Tokenizador predeterminado de ElastiSearch
Los datos en Elasticsearch se pueden dividir en dos categorías: valores exactos y texto completo.
Valor exacto: Por ejemplo fecha tipo fecha, si fecha tiene dos valores: 2014-09-15 y 2014, entonces los dos valores no son iguales. Otro ejemplo es que el tipo de cadena foo no es igual a Foo.
Texto completo: normalmente texto escrito en lenguaje humano, como un mensaje de tweet, el contenido de un correo electrónico, etc.
Los valores exactos se indexan fácilmente: un valor es equivalente o no. Indexar valores de texto completo requiere mucho esfuerzo. Por ejemplo, no sólo tenemos que pensar: ¿este documento coincide con nuestra consulta? Piense también: ¿Qué tan bien se ajusta este documento a nuestra consulta? En otras palabras: ¿Es este documento relevante para nuestra consulta? Rara vez hacemos coincidir con precisión todo el texto completo, lo que más queremos es hacer coincidir la información interna del texto completo. Además de esto, también queremos que la búsqueda comprenda nuestra intención: por ejemplo
Si busca Reino Unido, necesitamos que también coincida el texto que contiene Reino Unido. Si busca salto, se coincidirá con el texto que contenga saltado, saltos, saltos e incluso salto.
Para realizar la indexación de texto completo de manera más conveniente, Elasticsearch primero debe analizar el texto y luego usar el texto analizado para crear un índice inverso.
El segmentador de palabras predeterminado para la búsqueda de texto completo de Elasticsearch es el analizador estándar. En el analizador estándar, el filtro de caracteres no hace nada y el filtro de token solo convierte mayúsculas en inglés a minúsculas, por lo que Elasticsearch no distingue entre mayúsculas y minúsculas de forma predeterminada. A continuación se presenta principalmente Tokenizer.
El delimitador de token separa el texto en tokens (término). Cuando se escriben datos, se procesarán utilizando un analizador estándar y el texto se procesará como una lista de tokens. El texto buscado también se procesará de la misma manera y, finalmente, el token procesado se utilizará para coincidir con el token procesado del texto fuente.
A excepción de "a-z, A-Z, 0-9, _", pero excluyendo los tres caracteres ".;,", otras condiciones son separadores de tokens.
"." se utiliza como separador de token al vincular número y carácter. No es un separador en otros casos.
1) Después de que "número.número" sea procesado. analizador estándar, la lista de tokens [número .número]
Por ejemplo, "123.123s" no se puede encontrar buscando "123", pero se puede encontrar buscando "123.123s"
2) Después de "char.char" Después del procesamiento del analizador estándar, la lista de tokens [char.char]
Por ejemplo, "test.test" no se puede encontrar al buscar "test", pero se puede encontrar cuando se busca "test.test"
3) Después de que el analizador estándar procese "number.char o char.number", la lista de tokens es [number, char]
Por ejemplo, "test1.s1", la lista de tokens es [test1, s1], la búsqueda de "test1" puede coincidir
";" no se utiliza como separador de tokens al vincular números y número en otros casos, es un separador.
1) "número;número" Después del procesamiento por el analizador estándar, la lista de tokens [número;número]
Por ejemplo. , "123;123" no se puede encontrar buscando "123", pero se puede encontrar buscando "123;123"
2) Después de procesar "number;char o char;number" según el analizador estándar, la lista de tokens [número, char]
Por ejemplo, "test1;s1" puede coincidir buscando "test1"
3) Después de "char;char " es procesado por el analizador estándar, la lista de tokens [char, char]
Por ejemplo, "test1;ss1", la búsqueda de "test1s" puede coincidir
p>
Cuando "," vincula número y número, no se utiliza como separador de tokens. En otros casos, es un separador.
1) Después de que el analizador estándar procesa "número, número". lista de tokens [número, número]
Por ejemplo, "123,123", la búsqueda de "123" no se encontrará, la búsqueda de "123,123" puede coincidir
2) "número , char o char, número "Después del procesamiento mediante el analizador estándar, la lista de tokens [número, char]
Por ejemplo, "test1,s1", la búsqueda de "test1" puede coincidir
3) "char, char" Después de ser procesada por el analizador estándar, la lista de tokens [char, char]
Por ejemplo, "test;s1" se puede comparar buscando "test" p>
Separador de tokens tanto al principio como al final
1) "[,.;]char [,.;]" se procesa mediante el analizador estándar y la lista de tokens [char]
Por ejemplo, ",.test...", la búsqueda de "test" puede coincidir
2) Se procesa "[,.;]número [,.;]" por el analizador estándar, y la lista de tokens [número]
Por ejemplo, ", .123…”, la búsqueda de “123” puede coincidir
3) “_[separador de tokens ]número o” después del estándar
Después del procesamiento del analizador, la lista de tokens [número]
almacena la cadena: "123 test1:a_b a.b", y el token después de la segmentación de palabras es: [123, test1, a_b, a.b]
1) Usar el término de palabra clave para buscar 123, test1, a_b o a.b puede coincidir
2) Usar el término de palabra clave para buscar "test1##a_b" también puede coincidir, aquí el " #" simplemente actúa como un separador. La función del símbolo no tiene ningún significado práctico. Tiene el mismo significado que buscar "test1:a_b". La cadena de búsqueda se divide en dos tokens [test1 y a_b] para hacer coincidir.
3) El uso del término palabra clave para buscar "test1?." también puede coincidir, lo que equivale a usar el token "test1" para buscar
4) Buscar " a", no habrá coincidencia. Como resultado, no hay "a" en el token separado por la cadena de origen
La cadena almacenada: "123;456 prueba", el término después de la segmentación de palabras es : [123;456, prueba]
1) La consulta "123" no devuelve ningún resultado
2) La consulta "123:456" no devuelve ningún resultado p>
3) La consulta "123;456" da Resultados
4) La consulta ".123;456#" da resultados
Referencia: http://unicode. org/reports/tr29/
Excepto Todos los caracteres, excepto los chinos, son delimitadores y cada carácter se utilizará como un término. Por lo tanto, en la búsqueda, los caracteres distintos de los chinos no tienen ningún efecto y no se utilizarán como caracteres coincidentes.