- 
      
- 
        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"?