Filter ElasticSearch возвращает пустой массив
пытаюсь отфильтровать запрос ElasticSearch, мне нужно что бы в выборке были только статьи со именем схемы HelpArticle, но как только я добавляю любой фильтр возвращается пустой массив:
{
"query":{
"bool":{
"must":{
"multi_match":{
"query":"Статья",
"fields": [ "fields.title^2",
"fields.text",
"fields.name^2"]
}
}, "filter": {
"term":{
"schema.name":"Help_Article"
}
}
}
}
При этом если идти от обратного с использованием must_not все работает:
{
"query":{
"bool":{
"must":{
"multi_match":{
"query":"Статья",
"fields": [ "fields.title^2",
"fields.text",
"fields.name^2"]
}
}, "must_not": {
"match_phrase":{
"schema.name":"Help_Category"
}
}
}
}
}
Маппинг:
"schema": {
"properties": {
"name": {
"type": "text",
"fields": {
"raw": {
"type": "keyword"
}
},
"analyzer": "trigrams"
},
"uuid": {
"type": "keyword"
},
"version": {
"type": "keyword"
}
}
}
Ответы (1 шт):
Автор решения: Сергей Храмов
→ Ссылка
Раз фильтр по точному совпадению, то нужно использовать поле в котором тип keyword:
{
"query":{
"bool":{
"must":{
"multi_match":{
"query":"Статья",
"fields": [ "fields.title^2",
"fields.text",
"fields.name^2"]
}
}, "filter": {
"term":{
"schema.name.raw":"Help_Article"
}
}
}
}
Либо если не нужно точное совпадение попробовать вместо term - simple_query_string https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-simple-query-string-query.html