Uso do sinal de + em uma pesquisa em JSON com erro

Olá tudo bem ?
Estou realizando uma pesquisa de notícias utilizando o JSON e no nome contém o sinal de +
ex:"a+ Medicina Diagnóstica"

fiz a pesquisando utilizando o query_string e colocar o "\" antes do termo, ficando assim:

{"query": {"bool": {"must": [{"query_string": {"query": "\"Laboratório a mais\" OR \"a mais saúde\" OR \"a\\+ Medicina Diagnóstica\"","analyze_wildcard":"true", "fields": ["content", "title", "subtitle"]}}, {"terms": {"lang": ["pt"]}}, {"range": {"crawled_date": {"gte": "01/06/2021 00:00:00"}}}]}}, "sort": [{"published_date": {"order": "desc"}}], "size": 10, "from": 0}

Mas mesmo assim ele não retorna somente o termo "a+ Medicina Diagnóstica" ele retorna também o "a Medicina Diagnóstica".

Obrigado pela ajuda.

Olá Marlos, como vai?

Poderia postar aqui o mapeamento do índice desta busca?

Abs!

Opa! Obrigado pelo seu tempo.

{
    "prodknewin_digital": {
        "aliases": {},
        "mappings": {
            "properties": {
                "author": {
                    "type": "text"
                },
                "category": {
                    "type": "text"
                },
                "content": {
                    "type": "text"
                },
                "content_length": {
                    "type": "integer"
                },
                "crawled_date": {
                    "type": "date",
                    "format": "dd/MM/yyyy HH:mm:ss"
                },
                "domain": {
                    "type": "text"
                },
                "hat": {
                    "type": "text"
                },
                "id": {
                    "type": "integer"
                },
                "image_hits": {
                    "properties": {
                        "caption": {
                            "type": "text"
                        },
                        "credit": {
                            "type": "text"
                        },
                        "url": {
                            "type": "text"
                        }
                    }
                },
                "lang": {
                    "type": "text"
                },
                "locality": {
                    "type": "text",
                    "fields": {
                        "keyword": {
                            "type": "keyword",
                            "ignore_above": 256
                        }
                    }
                },
                "page": {
                    "type": "text",
                    "fields": {
                        "keyword": {
                            "type": "keyword",
                            "ignore_above": 256
                        }
                    }
                },
                "published_date": {
                    "type": "date",
                    "format": "dd/MM/yyyy HH:mm:ss"
                },
                "source": {
                    "type": "text"
                },
                "source_id": {
                    "type": "integer"
                },
                "source_locality": {
                    "properties": {
                        "country": {
                            "type": "text"
                        },
                        "countryAcronym": {
                            "type": "text"
                        },
                        "state": {
                            "type": "text"
                        },
                        "stateAcronym": {
                            "type": "text"
                        }
                    }
                },
                "subtitle": {
                    "type": "text"
                },
                "title": {
                    "type": "text"
                },
                "url": {
                    "type": "text"
                }
            }
        },
        "settings": {
            "index": {
                "number_of_shards": "1",
                "provided_name": "prodknewin_digital",
                "max_result_window": "900000",
                "creation_date": "1620851434999",
                "number_of_replicas": "1",
                "uuid": "UEgaK_2HSA6pj8dwAtuWEw",
                "version": {
                    "created": "7080099"
                }
            }
        }
    }
}

Obrigado! E poderia também confirmar qual a versão do Elasticsearch está usando?

Claro!

{
    "name": "dpJncDr",
    "cluster_name": "elasticsearch",
    "cluster_uuid": "QmT-rRN8R0WmpbJTPYIHVw",
    "version": {
        "number": "5.1.1",
        "build_hash": "5395e21",
        "build_date": "2016-12-06T12:36:15.409Z",
        "build_snapshot": false,
        "lucene_version": "6.3.0"
    },
    "tagline": "You Know, for Search"
}

A questão aqui é que seu mapeamento está utilizando o standard analyzer. Este analyzer remove símbolos como o sinal de + e desta forma vai de fato retornar textos com a Medicina Diagnóstica mesmo se buscar por a+ Medicina Diagnóstica.

Existem algumas formas de você contornar isso. Uma forma simples é configurar outro analyzer, pode ser com base no standard analyzer mesmo, e usar o mapping character filter com uma configuração a+ => a_PLUS (e também para todos os outros código tipo a+ que existir no seu contexto). Desta forma o standard tokenizer vai entender a_PLUS como uma palavra e assim vai ser incluído na indexação.

Espero ter ajudado!

Vou fazer a modificação e coloco aqui o resultado!
Vou precisar de tempo para refazer o indice
Obrigado!