Problema de pesquisa curinga com tipo de dados longo em elasticsearch
{
"from":0,
"query":{
"bool":{
"must":[
{
"query_string":{
"query":"10*",
"lenient":true,
"fields":[
"phoneNumber"
],
"escape":true
}
}
]
}
}
}
Aqui, o número de telefone é do tipo longo e queremos realizar uma pesquisa curinga nele. Estou transmitindo a consulta como 10 * ( "query":"10*",
). Os resultados reais deveriam ser 15, mas estou recebendo 0 resultados.
Se estou fazendo o mesmo para um campo do tipo palavra-chave (string) Endereço , com a consulta "query":"newyork*",
estou obtendo o resultado.
Alguém tem ideia de por que não obtivemos os acessos para campos com tipo longo?
Respostas
Não é diretamente possível executar curingas em tipos de dados numéricos. É melhor converter esses inteiros em strings.
Adicionar um exemplo funcional com dados de índice, mapeamento, consulta de pesquisa e resultado de pesquisa
Mapeamento de índice:
{
"mappings": {
"properties": {
"phoneNumber": {
"type": "text"
}
}
}
}
Dados do índice:
{
"phoneNumber": "101"
}
Consulta de pesquisa:
{
"query": {
"bool": {
"filter": [
{
"query_string": {
"query": "10*",
"fields": [
"phoneNumber"
]
}
}
]
}
}
}
Resultado da pesquisa:
"hits": [
{
"_index": "65109764",
"_type": "_doc",
"_id": "1",
"_score": 0.0,
"_source": {
"phoneNumber": "101"
}
}
]
Se você quiser fazer uma correspondência parcial, pode até usar o tokenizer edge n-gram