Búsqueda de Wilcard o coincidencia parcial en búsqueda elástica
Estoy tratando de proporcionar la búsqueda al usuario final con el tipo a medida que avanza, que es más como sqlserver. Pude implementar la consulta ES para el escenario sql dado:
select * from table where name like '%pete%' and type != 'xyz and type!='abc'
Pero la consulta ES no funciona para esta consulta SQL
select * from table where name like '%peter tom%' and type != 'xyz and type!='abc'
En mi búsqueda elástica junto con la consulta comodín, también necesito realizar alguna consulta filtrada booleana
{
"query": {
"filtered": {
"filter": {
"bool": {
"should": [
{
"query": {
"wildcard": {
"name":
{ "value": "*pete*" }
}
}
}
],
"must_not": [
{
"match":
{ "type": "xyz" }
}, {
"match":
{ "type": "abc" }
}
]
}
}
}
}
}
La consulta elástica anterior con búsqueda con comodines funciona bien y me da todos los documentos que coinciden con pete y no son del tipo xyz y abc. Pero cuando intento realizar el comodín con 2 palabras separadas separadas por espacio, la misma consulta me devuelve vacío como se muestra a continuación, por ejemplo
{
"query": {
"filtered": {
"filter": {
"bool": {
"should": [
{
"query": {
"wildcard": {
"name":
{ "value": "*peter tom*" }
}
}
}
],
"must_not": [
{
"match":
{ "type": "xyz" }
}, {
"match":
{ "type": "abc" }
}
]
}
}
}
}
}
Mi mapeo es el siguiente:
{
"properties": {
"name": {
"type": "string"
}
"type": {
"type": "string"
}
}
}
¿Qué consulta debo usar para hacer posible la búsqueda con comodines para palabras separadas por espacios?