Analyser elastic search

Tentei usar o analyser sugerido pelo alexandre e não funcionou pois ele continuou pesquisando a palavra que contem “de” e não o termo exato.

eu usei esse analyser:

{
 "settings": {
   "analysis": {
     "filter": {
       "my_stop": {
         "type": "stop",
         "stopwords": "_brazilian_"
       }
     }
   }
 }
}

Como faço pra pesquisar o termo exato ?

Ola, Jorge! Jorge, esse filter não é para ser aplicado na consulta, ele é aplicado na ação de criação do índice, como no exemplo abaixo:

curl -XPOST 'localhost:9200/meuindice' -d '{
                "settings": {
                    "analysis": {
                        "filter": {
                            "my_stop": {
                                "type": "stop",
                                "stopwords": "_brazilian_"
                            }
                        }
                    }
                },
                "mappings": {
                    "tipo1": {
                        "dynamic_templates": [
                            {
                                "pt-br": {
                                    "match": "*",
                                    "match_mapping_type": "string",
                                    "mapping": {
                                        "type": "string",
                                        "analyzer": "brazilian"
                                    }
                                }
                            }
                        ], "properties": {
                            "atributo1": {
                                "type": "string",
                                "index": "not_analyzed"
                            },
			    "atributo2": {
                                "type": "string"
                            }
                        }
                    }
                }
            }'

No exemplo acima, eu criei um índice chamado meu índice, que utilizará o filter de stopwords com a lista de palavras do português brasileiro e defini que para o tipo “tipo1” terá todos os seus campos string analisados com o analyser de português BR. Atentar que o filter e o analyser são coisas complementares, o filter remove as stopwords para o analisador e o analisador é que faz a analise seguindo o PT-BR considerando acentuação etc. Com esse novo índice, todos os documentos indexados dentro desse índice irão seguir esse modelo.

Também é possível ver que criei dois atributos, “atributo1” e “atributo2”. O “atributo1” está definido como “not_analysed”, o que significa que nesse caso, a consulta será pelo texto exato que for passado o filtro (inclusive o “de”). No caso do “atributo2”, como está sendo aplicado o analysador, a palavra “de” não será usada nas consultas.

Atentar que essas mudanças NÃO se aplicam ao que já foi indexado, ou seja, se você tem um índice já existente que já possui documentos, o elasticsearch não aplica as mudanças retroativamente, ou seja, a alternativa nesse caso é criar o novo índice seguindo essas configurações e daí migrar os dados de índice. Experimente criar um novo índice com uma pequena massa e teste se os seus documentos retornaram buscas da forma que você deseja, eu utilizo mapeamentos como esse acima e os resultados me atendem bem.

abraços