Não consigo ver nenhuma descrição de quando devo usar uma consulta ou um filtro ou alguma combinação dos dois. Qual a diferença entre eles? Alguém pode explicar?
elasticsearch
Jonesie
fonte
fonte
Respostas:
A diferença é simples: os filtros são armazenados em cache e não influenciam a pontuação, portanto, mais rapidamente que as consultas. Dê uma olhada aqui também. Digamos que uma consulta geralmente seja algo que os usuários digitam e praticamente imprevisível, enquanto os filtros ajudam os usuários a restringir os resultados da pesquisa, por exemplo, usando facetas.
fonte
Isto é o que a documentação oficial diz:
fonte
Um exemplo (tente você mesmo)
O índice do Say
myindex
contém três documentos:Consulta
hello sam
(usando a palavra-chavemust
)O documento
"Hello world! I am Sam."
recebe uma pontuação mais alta que"Hello world!"
, porque o primeiro corresponde às duas palavras da consulta. Os documentos são pontuados.Filtro
hello sam
(usando palavra-chavefilter
)Documentos que contêm um
hello
ousam
são retornados. Os documentos NÃO são pontuados .A menos que você precise de pesquisa ou pontuação de texto completo, os filtros são preferidos porque os filtros usados com frequência serão armazenados em cache automaticamente pelo Elasticsearch, para acelerar o desempenho. Consulte Elasticsearch: contexto de consulta e filtro.
fonte
Mais alguns acréscimos ao mesmo. Um filtro é aplicado primeiro e, em seguida, a consulta é processada sobre seus resultados. Para armazenar a correspondência binária verdadeiro / falso por documento, é usado algo chamado matriz bitSet. Essa matriz BitSet está na memória e seria usada na segunda vez em que o filtro fosse consultado. Dessa maneira, usando a estrutura de dados da matriz de bits, podemos utilizar o resultado em cache.
Mais um ponto a ser observado aqui, o cache do filtro é criado apenas quando a solicitação é executada; portanto, apenas a partir do segundo hit, obtemos a vantagem do cache.
Mas então você pode usar uma API mais quente para superar isso. Quando você registra uma consulta com filtro em uma API mais quente, ela garante que ela seja executada em um novo segmento sempre que for publicada. Portanto, obteremos velocidade consistente a partir da primeira execução.
fonte
Basicamente, uma consulta é usada quando você deseja executar uma pesquisa em seus documentos com pontuação. E os filtros são usados para restringir o conjunto de resultados obtidos usando a consulta. Os filtros são booleanos.
Por exemplo, digamos que você tenha um índice de restaurantes como o zomato. Agora você deseja procurar restaurantes que servem 'pizza' , que é basicamente a sua palavra-chave de pesquisa.
Então você usará a consulta para encontrar todos os documentos que contêm "pizza" e alguns resultados serão obtidos.
Diga agora que você quer uma lista de restaurantes que servem pizza e tem uma classificação de pelo menos 4,0.
Portanto, o que você precisará fazer é usar a palavra-chave "pizza" na sua consulta e aplicar o filtro para classificação como 4,0.
O que acontece é que os filtros geralmente são aplicados nos resultados obtidos consultando seu índice.
fonte
Filters
-> Este documento corresponde? um binário sim ou não respostaQueries
-> Este documento corresponde? Quão bem ele combina? usa pontuaçãofonte
Desde a versão 2 do Elasticsearch, os filtros e as consultas foram mesclados e qualquer cláusula de consulta pode ser usada como filtro ou como consulta (dependendo do contexto). Como na versão 1, os filtros são armazenados em cache e devem ser usados se a pontuação não importa.
Fonte: https://logz.io/blog/elasticsearch-queries/
fonte