Elasticsearch lança uma SearchParseException
consulta durante a análise se houver alguns documentos encontrados que não contêm campos usados nos critérios de classificação.
SearchParseException: Parse Failure [Nenhum mapeamento encontrado para [preço] para classificar em]
Como posso pesquisar esses documentos com sucesso, mesmo se alguns estiverem faltando o price
campo?
sorting
mapping
elasticsearch
Yadu
fonte
fonte
Respostas:
Depois de cavar mais, encontrei a solução fornecida a seguir.
ignore_unmapped
deve ser explicitamente definido comotrue
na cláusula de classificação.Para obter mais informações, dê uma olhada nas referências do Elasticsearch para:
fonte
"ignore_unmapped" : true
e começou a funcionar de novo, mas o estranho é o que aconteceu nos bastidores! Quem sabe! Enfim, agora funciona. +1Observe que "ignore_unmapped" agora está obsoleto em favor de "unmapped_type". Isso foi feito como parte do # 7039
Da documentação: Antes da 1.4.0 havia o parâmetro booleano ignore_unmapped, que não era informação suficiente para decidir sobre os valores de classificação a serem emitidos e não funcionava para pesquisa de índice cruzado. Ainda é compatível, mas os usuários são incentivados a migrar para o novo unmapped_type.
Por padrão, a solicitação de pesquisa falhará se não houver mapeamento associado a um campo. A opção unmapped_type permite ignorar os campos que não possuem mapeamento e não classificar por eles. O valor deste parâmetro é usado para determinar quais valores de classificação emitir. Aqui está um exemplo de como ele pode ser usado:
Se algum dos índices consultados não tiver um mapeamento de preço, o Elasticsearch o tratará como se houvesse um mapeamento do tipo longo, com todos os documentos neste índice sem valor para este campo.
fonte
Aparentemente, ElasticSearch não classifica com base em valores nulos. Eu estava supondo que ele trataria null como estando no início ou no final (como ocorre com a ordenação SQL), mas acredito que também aciona esse erro.
Portanto, se você vir este erro, pode ser necessário garantir que o atributo sort tenha um valor padrão quando for enviado para ElasticSearch.
Eu tive este erro com Rails + ElasticSearch + Tire porque a coluna de classificação não tinha um valor padrão, então estava sendo enviada para ES como nula.
Esse problema indica que os valores nulos estão sendo tratados, mas não foi minha experiência. É algo que vale a pena tentar de qualquer maneira.
fonte
Tive o mesmo problema (sorta; obteria alguns erros, mas alguns resultados), mas no meu caso minha pesquisa estava sendo emitida na raiz (nenhum índice especificado), e os erros que estava recebendo eram porque a pesquisa / ordem também era olhando para um índice Kibana.
Erro estúpido, mas talvez isso ajude outra pessoa que acaba aqui.
fonte
Elasticsearch 6.4
simplesmente especifique o índice e pronto em Kibana
ANTES
DEPOIS DE
fonte
se você estiver usando o ES 6.7
tente este
fonte
Você também pode usar um script, o que lhe dá alguma flexibilidade:
fonte
Quando usamos o código abaixo, onde Added_on é a data, o que acontece !! o texto do atributo é analisado, o que significa que é dividido em palavras distintas quando armazenado e permite pesquisas de texto livre em uma ou mais palavras no campo
portanto, há "texto" e "palavra-chave" associados aos campos, portanto, se precisarmos usar agregação na consulta, precisaremos do valor do campo em geral, a palavra-chave.
fonte