Open leonardofl opened 6 years ago
Acho que o PR #321 por ajudar também!
Entao, estamos estudando elasticsearch pra fecharmos a issue. Mas estamos com alguns problemas.
1 - Seguindo a documentacao de instalacao desse link https://github.com/eduardohideo/radar/blob/821465daf91c58980b826c4e849ce62af8098ec0/doc/INSTALL.md, após verificar que o ElasticSearch esta rodando na porta http://localhost:9200, nao estamos conseguindo configurar a engine de busca, mais precisamente a etapa 8.
2 - No estado atual do projeto, o ElasticSearch é executado toda vez que chamamos algum importador, correto? Nesse caso, como podemos ver o resultado do processo do stemmer?
ola Harrison,
em 1, qual seria o problema?
2: quando se faz a busca, ele percebe que tem um analisador no índice e faz o "stemmer" da palavra. Por exemplo ,qndo se coloca escolas na busca, ele encontra ocorrências de escola, escolas e escolar.
2018-04-12 12:05 GMT-03:00 Harrison Pedro notifications@github.com:
Entao, estamos estudando elasticsearch pra fecharmos a issue. Mas estamos com alguns problemas.
1 - Seguindo a documentacao de instalacao desse link https://github.com/ eduardohideo/radar/blob/821465daf91c58980b826c4e849ce6 2af8098ec0/doc/INSTALL.md, após verificar que o ElasticSearch esta rodando na porta http://localhost:9200, nao estamos conseguindo configurar a engine de busca, mais precisamente a etapa 8.
2 - No estado atual do projeto, o ElasticSearch é executado toda vez que chamamos algum importador, correto? Nesse caso, como podemos ver o resultado do processo do stemmer?
— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/radar-parlamentar/radar/issues/449#issuecomment-380838401, or mute the thread https://github.com/notifications/unsubscribe-auth/AAZo5v0Cs51Tg0CK-er_GwR6r_d6WSU4ks5tn21TgaJpZM4S6Sxm .
@peddrro repare que esse link que você postou está super desatualizado. Hoje estamos usando docker para lidar com toda nossa stack, incluindo o elasticsearch... não tem mais instalação "manual" nem nada assim. Aquele "INSTALL.md" já não server mais de referência, ele foi substituído por este: https://github.com/radar-parlamentar/radar/blob/master/doc/SETUP.md
@diraol sim, reparei isso. Conseguimos rodar aqui com o docker, muito obrigado.
@eduardohideo Entao estamos com problema de que o "stemmer" nao consegue encontrar ocorrencias de escola, escolas e escolar a partir de "escolas". O que estamos usando para realizar os testes, é com esse comando aqui:
sudo docker-compose exec django curl -XGET 'http://elasticsearch:9200/radar_parlamentar/_analyze?analyzer=my_analyzer&text=escolas' | python3 -m json.tool
e estamos recebendo isso:
{
"tokens": [
{
"token": "escol",
"start_offset": 0,
"end_offset": 7,
"type": "<ALPHANUM>",
"position": 0
}
]
}
esse "token" deveria vim com os valores escola, escolas e escolar? Ou esse teste deveria ser realizado de outra forma?
Esse exemplo é mesmo antigo como o diego disse, testei aqui e teve que fazer algumas mudancas no mapping e trocar a chamada do analyze para POST para fazer funcionar na versao mais nova do ES.
ele recebeu o texto escolas e disse que a raiz é escol, aplicando a regra que está nos arquivos do Hunspell,
no arquivo pt-BR.dic, nao tem escola mas tem escol que aplica a regra CAO escol/CAO
no pt-BR.aff que tem as regras uma regra A diz que se a palavra for sufixo terminado em l ou m ou r entao adiciona a (escola) SFX A 0 a [lmr] nessa aqui ele diz para adicionar as no final (escolas) SFX A 0 as [lmr]
essa regra diz que se termina com ão adiciona es, como nao termina entao nao é aplicada(nao adiciona) SFX A o es ão
escolinha SFX O 0 inha [lz]
escolinhas SFX O 0 inhas l
qqr dessas contracoes leva para escol
nota que escolar não esta na regra de escol mas no .dic tem escolar/BRXjÁúÍÔ , ai ele é uma palavra raiz que tem alguns sufixos e prefixos https://www.elastic.co/guide/en/elasticsearch/guide/current/hunspell.html
eu fiz aqui alguns testes: primeiro criei varios textos que tem escol
http://localhost:9200/radar_parlamentar/_search { "took": 2, "timed_out": false, "_shards": { "total": 5, "successful": 5, "skipped": 0, "failed": 0 }, "hits": { "total": 6, "max_score": 1, "hits": [ { "_index": "radar_parlamentar", "_type": "_doc", "_id": "5", "_score": 1, "_source": { "text": "escolo teste" } }, { "_index": "radar_parlamentar", "_type": "_doc", "_id": "2", "_score": 1, "_source": { "text": "escolar teste" } }, { "_index": "radar_parlamentar", "_type": "_doc", "_id": "4", "_score": 1, "_source": { "text": "escol teste" } }, { "_index": "radar_parlamentar", "_type": "_doc", "_id": "6", "_score": 1, "_source": { "text": "escoles teste" } }, { "_index": "radar_parlamentar", "_type": "_doc", "_id": "1", "_score": 1, "_source": { "text": "escola teste" } }, { "_index": "radar_parlamentar", "_type": "_doc", "_id": "3", "_score": 1, "_source": { "text": "escolas teste" } } ] } }
depois fiz a busca com escolinha que é contracao de escola:
{ "took": 3, "timed_out": false, "_shards": { "total": 5, "successful": 5, "skipped": 0, "failed": 0 }, "hits": { "total": 3, "max_score": 0.9808292, "hits": [ { "_index": "radar_parlamentar", "_type": "_doc", "_id": "4", "_score": 0.9808292, "_source": { "text": "escol teste" } }, { "_index": "radar_parlamentar", "_type": "_doc", "_id": "1", "_score": 0.2876821, "_source": { "text": "escola teste" } }, { "_index": "radar_parlamentar", "_type": "_doc", "_id": "3", "_score": 0.2876821, "_source": { "text": "escolas teste" } } ] } }
Então é +- essa ideia
[]'s Eduardo
2018-04-12 17:37 GMT-03:00 Harrison Pedro notifications@github.com:
@diraol https://github.com/diraol sim, reparei isso. Conseguimos rodar aqui com o docker, muito obrigado.
@eduardohideo https://github.com/eduardohideo Entao estamos com problema de que o "stemmer" nao consegue encontrar ocorrencias de escola, escolas e escolar a partir de "escolas". O que estamos usando para realizar os testes, é com esse comando aqui:
sudo docker-compose exec django curl -XGET 'http://elasticsearch:9200/radar_parlamentar/_analyze?analyzer=my_analyzer&text=escolas' | python3 -m json.tool
e estamos recebendo isso:
{ "tokens": [ { "token": "escol", "start_offset": 0, "end_offset": 7, "type": "
", "position": 0 } ] } esse "token" deveria vim com os valores escola, escolas e escolar? Ou esse teste deveria ser realizado de outra forma?
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/radar-parlamentar/radar/issues/449#issuecomment-380936861, or mute the thread https://github.com/notifications/unsubscribe-auth/AAZo5qupgmFY0heIYopbK6Nfe9NQKOQ5ks5tn7sggaJpZM4S6Sxm .
Observem no docker compose a versão q estamos usando do ES. Estamos usando uma versão velha, pq versões mais novas exigem um comando bem intrusivo* no SO do hospedeiro do container!
A busca por palavras-chaves utiliza o Elastic Search e um processo de "stemmer", que compara as raízes das palavras pra melhorar a qualidade das buscas. Mas há várias opções de configuração de stemmer no ES. E me parece que a nossa não está tão boa assim. Segue alguns exemplos que funcionam e outros que não:
Seria legal melhorar a configuração de stemmer do ES pra fazer os exemplos "not ok" funcionarem.
Usar outra ferramenta para a busca, como o próprio postgres, por exemplo, também é opção.
Referência: https://www.elastic.co/guide/en/elasticsearch/guide/current/stemming.html
Atentar para os problemas de Understemming e Overstemming.
Estamos usando o stemmer por dicionário: https://www.elastic.co/guide/en/elasticsearch/guide/current/hunspell.html