-
Notifications
You must be signed in to change notification settings - Fork 44
Melhorar a qualidade da busca por palavras-chaves #449
Comments
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 <[email protected]>:
… 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
<#449 (comment)>,
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. |
@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:
e estamos recebendo isso:
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 <[email protected]>:
… @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": "<ALPHANUM>",
"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
<#449 (comment)>,
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
The text was updated successfully, but these errors were encountered: