-
-
Save luizgpsantos/f9b2f57ea13e7515b48a to your computer and use it in GitHub Desktop.
// 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 |
Está ignorando palavras compostas, "buenos aires" por exemplo. Sabe por que?
Ótimo.
só não funciona quando utiliza acento TIL no "Õ" em algumas palavras como por exemplo: mamões, televisões, limões etc... neste caso diferencia a palavra com acento de sem acento, não sei porque cargas d'água. Tirando isso funciona perfeitamente os acentos e plural.
Olá, ao tentar rodar a primeira parte do "exemplo completo" ele me retorna esse erro:
"error": {
"root_cause": [
{
"type": "mapper_parsing_exception",
"reason": "Root mapping definition has unsupported parameters: [seu_tipo : {properties={titulo={analyzer=analyzer_customizado, type=string}}}]"
}
],
"type": "mapper_parsing_exception",
"reason": "Failed to parse mapping [_doc]: Root mapping definition has unsupported parameters: [seu_tipo : {properties={titulo={analyzer=analyzer_customizado, type=string}}}]",
"caused_by": {
"type": "mapper_parsing_exception",
"reason": "Root mapping definition has unsupported parameters: [seu_tipo : {properties={titulo={analyzer=analyzer_customizado, type=string}}}]"
}
},
"status": 400
Ah, e o que seria o no mapping o "seu_tipo"?
Alguém poderia me ajudar por favor, obrigado!
[EDIT]: Atualizei o exemplo para ser compatível com a versão atual do Elasticsearch (7.11.0).
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!
;-)
Parabéns pelo conteúdo compartilhado, ajudou bastante 👍
O que é o "seu_tipo"?