aws - elasticsearch mysql
Búsqueda elástica: diferencia entre "Término", "Frase de coincidencia" y "Cadena de consulta" (2)
Creo que alguien definitivamente busca las diferencias entre ellos con respecto a la BÚSQUEDA PARCIAL. Aquí está mi análisis con el ''analizador estándar'' predeterminado: -
Supongamos que tenemos datos:
{"nombre": "Hola"}
Ahora que pasa si queremos hacer una búsqueda parcial con ell ???
Consulta de términos O consulta de coincidencia
{"term":{"name": "*ell*" }
No funcionará, vuelve a señalar.
{"term":{"name": "*zz* *ell*" }
No funcionará, vuelve a señalar.
Conclusión : Term or Match no puede hacer una búsqueda parcial en absoluto
Consulta comodín: -
{"wildcard":{"name": "*ell*" }
Funcionará dando el resultado {"nombre": "Hola"}
{"wildcard":{"name": "*zz* *ell*" }
No funcionará, vuelve a señalar.
Conclusión : el comodín puede hacer una búsqueda parcial con solo un token
Query_string: -
{"query_string": {"default_field": "name","query": "*ell*"}
Funcionará dando el resultado {"nombre": "Hola"}
{"query_string": {"default_field": "name","query": "*zz* *ell*" }
Funcionará dando el resultado {"nombre": "Hola"}.
Conclusión : query_string puede buscar con dos tokens.
-> aquí token son ell y zz
Nuevo aquí para la búsqueda elástica y tratando de obtener una mejor comprensión de la diferencia entre estas consultas. Por lo que puedo decir, las coincidencias de term
un solo término (debe ser minúscula para que funcione la coincidencia), y tanto la match phrase
como la query string
coinciden con una cadena de texto.
term
consulta de term
coincide con un solo término tal como es: el valor no se analiza . Por lo tanto, no tiene que ser en minúscula dependiendo de lo que haya indexado.
Si proporcionó a Bennett
en el momento del índice y el valor no se analiza, la siguiente consulta no arrojará nada:
{
"query": {
"term" : { "user" : "bennett" }
}
}
match_phrase
query analizará la entrada si los analizadores están definidos para el campo consultado y encontrará documentos que coincidan con los siguientes criterios:
- todos los términos deben aparecer en el campo
- deben tener el mismo orden que el valor de entrada
Por ejemplo, si indiza los siguientes documentos (utilizando standard
analizador standard
para el campo foo
):
{ "foo":"I just said hello world" }
{ "foo":"Hello world" }
{ "foo":"World Hello" }
Esta consulta match_phrase
solo devolverá el primer y segundo documento:
{
"query": {
"match_phrase": {
"foo": "Hello World"
}
}
}
query_string
query search, de forma predeterminada, en un campo _all que contiene el texto de varios campos de texto a la vez. Además de eso, se analiza y admite algunos operadores (Y / O ...), comodines, etc. (consulte la sintaxis relacionada ).
Como las consultas match_phrase
, la entrada se analiza de acuerdo con el analizador establecido en el campo consultado.
A diferencia de match_phrase
, los términos obtenidos después del análisis no tienen que estar en el mismo orden, a menos que el usuario haya utilizado comillas alrededor de la entrada.
Por ejemplo, utilizando los mismos documentos que antes, esta consulta devolverá todos los documentos:
{
"query": {
"query_string": {
"query": "hello World"
}
}
}
Pero esta consulta devolverá los mismos 2 documentos que la consulta match_phrase
:
{
"query": {
"query_string": {
"query": "/"Hello World/""
}
}
}
Hay mucho más para decir acerca de las diferentes opciones para esas consultas, por favor eche un vistazo a la documentación relacionada:
Espero que esto sea lo suficientemente claro y ayude.