Вы ищете на categoryCode
, который анализируется, следовательно, проходит фазу анализа и создает токены в соответствии с вашим standard
анализатором (поисковым анализатором), который также понижает токены.
Вместо categoryCode
вам нужно выполнить поиск по categoryCode.raw
, который содержит форму ключевого слова вашего документа. Также вам может потребоваться удалить lowercase_normalizer
, как в вашем запросе, вы используете запрос term
, который бы не t go через ваше lowercase normalizer
на необработанном поле и может привести к тому, что PAYROLL
не совпадет с payroll
.
Я создал образец определения индекса, проиндексировал документ и изменил ваш поисковый запрос, чтобы получить ожидаемые результаты (все ваше сопоставление было недоступно, поэтому создан минимальный пример объяснения)
Индекс по умолчанию (минимум)
{
"mappings": {
"properties": {
"categoryCode": {
"type": "text",
"fields": {
"raw": {
"type": "keyword",
"norms": false
},
"fulltext": {
"type": "text",
"analyzer": "standard",
"doc_values": false
}
}
}
}
}
}
Индекс до c
{
"categoryCode" : "PAYROLL"
}
Запрос поиска
{
"query": {
"bool": {
"filter": [
{
"bool": {
"must": [
{
"term": {
"categoryCode.raw": { -->notice `.raw`
"value": "PAYROLL"
}
}
}
]
}
}
]
}
}
}
Результат поиска
"hits": [
{
"_index": "so-60531341",
"_type": "_doc",
"_id": "1",
"_score": 0.0,
"_source": {
"categoryCode": "PAYROLL"
}
}
]