kb.erickguedes.com
Elasticsearch: Busca e Analytics

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

TokenizerDescrição
standardDivisão por palavras baseada em gramática Unicode
whitespaceDivisão por espaços em branco
keywordTexto completo como um único token
gramGera N-grams de tamanho configurável
edge_ngramN-grams a partir do início do termo (autocomplete)
patternDivisã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" } ] }

FilterDescrição
lowercaseConverte para minúsculas
stemmerReduz palavras ao radical (stemming)
stopRemove stopwords (artigos, preposições)
synonymAdiciona sinônimos
sciifoldingRemove acentos
gram / edge_ngramGera N-grams
shingleGera word n-grams
runcateTrunca 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.