2
respostas

Busca por "pedaços" de uma palavra

Boa tarde,

Realizando os exercícios e assistindo as aulas me surgiu uma dúvida. Por exemplo: Se eu tenho um _all com os seguintes termos:

João Silva Musica Futebol Escola Politécnica Blah Bleh

Na busca, se digito o termo técnica ou tecnica minha busca não irá retornar nada.

Gostaria de saber neste caso, como eu poderia fazer uma busca usando somente esse "pedaço" do texto que seria técnica, para que na minha busca, o documento que contém o _all acima retorne em meu resultado.

Obs.: Sei que posso fazer um wildcard search passando por exemplo *tecnica*, mas essa pratica é pouco performática.

2 respostas

Oi Gauge,

pelo que sei vc precisa ajustar os seus analyzer e usar inverted índices para pegar esses casos.

abs

Oi Gauge, o Nico tem razão. O segredo está nas entradas geradas no índice invertido. Entretando, fazer tecnica retornar documentos como politecnica, eletrotecnica me parece algo que deve ser abordado com cuidado. Lembre-se, você esta procurando documentos e não quer causar efeitos colaterais e recuperar documentos que não te interesam (e.g.: eletrotecnica). Poderia ter um atributo com palavras-chaves, o que seria mais explícito. Uma outra dica, um pouco mais avançada é usar ngrams (https://www.elastic.co/guide/en/elasticsearch/guide/current/_ngrams_for_partial_matching.html). Esta abordagem deve te ajudar na geração das entradas e ter um controle melhor dos efeitos colaterais.