Pesquisa Wilcard ou correspondência parcial na pesquisa Elastic
Eu estou tentando fornecer a pesquisa para o usuário final com o tipo conforme eles vão, o que é mais parecido com o sqlserver. Consegui implementar a consulta ES para o cenário sql fornecido:
select * from table where name like '%pete%' and type != 'xyz and type!='abc'
Mas a consulta ES não funciona para esta consulta sql
select * from table where name like '%peter tom%' and type != 'xyz and type!='abc'
Na minha pesquisa elástica junto com a consulta curinga, também preciso realizar alguma consulta filtrada booleana
{
"query": {
"filtered": {
"filter": {
"bool": {
"should": [
{
"query": {
"wildcard": {
"name":
{ "value": "*pete*" }
}
}
}
],
"must_not": [
{
"match":
{ "type": "xyz" }
}, {
"match":
{ "type": "abc" }
}
]
}
}
}
}
}
A consulta elástica acima com pesquisa curinga funciona bem e obtém todos os documentos que correspondem a pete e não são do tipo xyz e abc. Mas quando tento executar o curinga com 2 palavras separadas separadas pelo espaço, a mesma consulta me retorna vazia, como mostrado abaixo. Por exemplo
{
"query": {
"filtered": {
"filter": {
"bool": {
"should": [
{
"query": {
"wildcard": {
"name":
{ "value": "*peter tom*" }
}
}
}
],
"must_not": [
{
"match":
{ "type": "xyz" }
}, {
"match":
{ "type": "abc" }
}
]
}
}
}
}
}
Meu mapeamento é o seguinte:
{
"properties": {
"name": {
"type": "string"
}
"type": {
"type": "string"
}
}
}
Que consulta devo usar para possibilitar a pesquisa de curingas por palavras separadas por espaços