Skip to content

Instantly share code, notes, and snippets.

@luizgpsantos
Last active May 4, 2024 16:31
Show Gist options
  • Star 13 You must be signed in to star a gist
  • Fork 4 You must be signed in to fork a gist
  • Save luizgpsantos/f9b2f57ea13e7515b48a to your computer and use it in GitHub Desktop.
Save luizgpsantos/f9b2f57ea13e7515b48a to your computer and use it in GitHub Desktop.
Analyzer para plural e acentos no elasticsearch
// Ao [criar o índice][0], especifique um [analyzer customizado][1] responsável por tratar palavras
// com caracteres especiais e o plural da lingua Portuguesa. Algumas palavras precisarão de uma
// sintonia fina, o que pode ser feito através de [stemmer overrides][2]. Além disso, ao criar um
// campo atribua o analyzer a ele.
PUT produtos
{
"settings": {
"analysis": {
"analyzer": {
"analyzer_plural_acentos": {
"tokenizer": "standard",
"filter": [
"lowercase",
"custom_stems",
"stemmer_plural_portugues",
"asciifolding"
]
}
},
"filter": {
"custom_stems": {
"type": "stemmer_override",
"rules": [
"televisoes => televisão"
]
},
"stemmer_plural_portugues": {
"type": "stemmer",
"name": "minimal_portuguese"
}
}
}
},
"mappings": {
"properties": {
"titulo": {
"type": "text",
"analyzer": "analyzer_plural_acentos"
}
}
}
}
// Indexe os documentos, que podem conter acentos, maiusculas, plural, etc...
PUT produtos/_doc/1
{
"titulo": "avelãs"
}
PUT produtos/_doc/2
{
"titulo": "televisão"
}
// Faça uma busca utilizando um termo sem acento ou no plural. O resultado deve conter os
// documentos com os termos acentuados e no singular.
POST produtos/_search
{
"query": {
"match": {
"titulo": "televisoes"
}
}
}
// Outro exemplo de query...
POST produtos/_search
{
"query": {
"match": {
"titulo": "AVELAS"
}
}
}
// Para entender como o analyzer customizado está gerando os tokens, podemos utilizar a [analyze API][3]:
GET produtos/_analyze
{
"text": ["televisões", "televisoes", "AVELAS"],
"analyzer": "analyzer_plural_acentos"
}
[0]: https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-create-index.html
[1]: https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-custom-analyzer.html
[2]: https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-stemmer-override-tokenfilter.html
[3]: https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-analyze.html
@luizgpsantos
Copy link
Author

[EDIT]: Atualizei o exemplo para ser compatível com a versão atual do Elasticsearch (7.11.0).

@AdminPulsar
Copy link

Olá @luizgpsantos, muito obrigado pela pronta resposta, funcionou perfeitamente para o que eu estava estudando!

Mais uma vez obrigado pela disponibilidade e pelo post que foi muito claro e objetivo, parabéns!

;-)

@nelsonjunior
Copy link

Parabéns pelo conteúdo compartilhado, ajudou bastante 👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment