Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Como analisar a frase completa?

Se eu quiser quebrar pela frase exata? No google usamos aspas certo? Aqui seria qual analyzer? O keyword? No meu caso não posso usar o keyword por estou indexando código fontes que tem mais que 32766 bites. Existe outra abordagem? Por exemplo, se eu pesquisar "Eu nasci", só quero que ache o que está exatamente nessa sequencia, se tiver apenas "Eu" ou "nasci", ou se tiver as duas palavras em lugares diferentes do texto eu não quero trazer o resultado.

3 respostas

Oi Jeferson!

Exato, para você quebrar por "Eu nasci", basta trocar o tipo de analyzer para o Keyword Analyzer (ou analisador de palavra-chave).

Esse analyzer vai te retornar a frase completa.

Inclusive, legal que você mencionou, pois ele foi criado usando uma linguagem do pessoal da Google. :P

Veja se o exemplo abaixo ajuda a resolver o seu problema:

POST _analyze
{
  "analyzer": "keyword",
  "text": "Eu nasci"
}

E ele vai retornar:

[ Eu nasci ]

Eu não tenho certeza se dá pra fazer um GET, mas imagino que sim, então seria:

GET /_analyze?analyzer=keyword&text=Eu+nasci

Espero que dê certo! Qualquer outra dúvida, só postar aqui!

Olá Cassia. O problema do keyword analyzer é a limitação do tamanho de cada termo, 32766 bites, o que torna ele inviável para arquivos grandes. Existe outra solução?

solução!

Olá Jeferson,

Ah, agora entendi porque você mencionou o código fonte. :)

Então, você tem alguns modos de resolver, caso não quisesse buscar o campo você poderia não indexa-lo, setar o "index": "no" , ou usar ignore_above para que ele não tenha problemas com valores grandes.

Pelo o que eu entendi, você quer continuar buscando o campo, certo? Então, eu diria que a melhor solução seria criar um custom analyzer para esse campo longo e usar o keyword como tokenizer.

Mas, você também pode mudar o tipo do campo para binário usando "type" : "binary".

Não sei se você já tentou essas soluções, espero que alguma delas funcione.

Infelizmente, pelo o que eu já vi e pesquisei, esse problema de tamanho do Lucene é algo comum e não tem uma solução mais direta para isso. :/