Análise de Texto e Search As You Type
Aula 4 de 6
Análise de Texto no Elasticsearch
O módulo de análise de texto transforma campos text em tokens pesquisáveis através de analisadores, tokenizers e filtros.
Analyze API — Testando Analisadores
`json POST /_analyze { "analyzer": "standard", "text": "Notebook Dell XPS 15" }
POST /_analyze { "tokenizer": "standard", "filter": ["lowercase", "asciifolding"], "text": "Notebook Dell XPS 15" } `
Tokenizers
| Tokenizer | Descrição |
|---|---|
| standard | Divisão por palavras baseada em gramática Unicode |
| whitespace | Divisão por espaços em branco |
| keyword | Texto completo como um único token |
| gram | Gera N-grams de tamanho configurável |
| edge_ngram | N-grams a partir do início do termo (autocomplete) |
| pattern | Divisão por regex |
json POST /_analyze { "tokenizer": { "type": "edge_ngram", "min_gram": 2, "max_gram": 10 }, "text": "notebook" }
Filters — Filtros de Token
json POST /_analyze { "text": "correndo corrida correu", "tokenizer": "standard", "filter": [ "lowercase", { "type": "stemmer", "language": "portuguese" } ] }
| Filter | Descrição |
|---|---|
| lowercase | Converte para minúsculas |
| stemmer | Reduz palavras ao radical (stemming) |
| stop | Remove stopwords (artigos, preposições) |
| synonym | Adiciona sinônimos |
| sciifolding | Remove acentos |
| gram / edge_ngram | Gera N-grams |
| shingle | Gera word n-grams |
| runcate | Trunca tokens longos |
Custom Analyzer
json PUT /produtos { "settings": { "analysis": { "analyzer": { "produto_analyzer": { "type": "custom", "tokenizer": "standard", "filter": [ "lowercase", "asciifolding", "brazilian_stemmer", "produto_synonyms" ] } }, "filter": { "brazilian_stemmer": { "type": "stemmer", "language": "brazilian" }, "produto_synonyms": { "type": "synonym", "synonyms": [ "notebook, laptop, notebook", "teclado, keyboard", "mouse, rato, mouse" ] } } } }, "mappings": { "properties": { "nome": { "type": "text", "analyzer": "produto_analyzer", "search_analyzer": "standard" } } } }
search_as_you_type — Autocomplete Nativo
`json PUT /produtos { "mappings": { "properties": { "nome": { "type": "search_as_you_type", "analyzer": "standard" } } } }
GET /produtos/_search { "query": { "multi_match": { "query": "note", "type": "bool_prefix", "fields": [ "nome", "nome._2gram", "nome._3gram", "nome._index_prefix" ] } } } `
Completion Suggester
`json PUT /produtos { "mappings": { "properties": { "sugestao": { "type": "completion" } } } }
PUT /produtos/_doc/1 { "nome": "Notebook Dell XPS", "sugestao": { "input": ["Notebook Dell XPS", "Dell XPS", "XPS"], "weight": 10 } }
GET /produtos/_search { "suggest": { "produto_suggest": { "prefix": "not", "completion": { "field": "sugestao", "size": 5 } } } } `
Lab: Motor de Busca com Autocomplete
`ash
1. Crie um índice com custom analyzer (lowercase, stemmer, synonyms)
2. Adicione um campo search_as_you_type para autocomplete
3. Adicione um campo completion para sugestões
4. Indexe 10 produtos
5. Teste:
- Busca com prefixo (search_as_you_type)
- Sugestões com completion suggester
- Análise com _analyze
- Sinônimos (notebook busca laptop)
curl -X POST "http://localhost:9200/produtos/_search"
-H "Content-Type: application/json"
-d '{ "suggest": { "sug": { "prefix": "not", "completion": { "field": "sugestao" } } } }'
`
A análise de texto define a qualidade da busca. Custom analyzers, search_as_you_type e completion suggester são essenciais para experiências de busca ricas.