Вы можете использовать логический запрос, рекомендованный elasti c, и он поддерживает must_not
и определение которого из этого официального do c равно . Пожалуйста, обратитесь к предупреждению о строке запроса, почему это не рекомендуется .
Предложение (запрос) не должно появляться в соответствующих документах. Предложения выполняются в контексте фильтра, что означает, что оценка игнорируется, а предложения рассматриваются для кэширования. Поскольку оценка игнорируется, возвращается оценка 0 для всех документов.
Вы также можете включить это в контекст фильтра , который кешируется по умолчанию и обеспечивает большое преимущество в производительности:
Больше от официального do c, который включает информацию о параметре must_not
Контекст фильтра действует всякий раз, когда условие запроса передается параметру фильтра, такие как параметры фильтра или must_not в запросе bool, параметр фильтра в запросе constant_score или агрегация фильтра.
Пример примера
Индекс def
{
"mappings" :{
"properties" : {
"my_filter" : { --> not created for `must_not` filter
"type" : "keyword"
}
}
}
}
Индекс образцов документов
{
"my_filter" : "foo"
}
{
"my_filter" : "bar"
}
Поисковый запрос, отфильтровывающий foo
{
"query": {
"bool": {
"must_not": {. --> this will execute in filter context, hence will be cached
"term": {
"my_filter": "foo"
}
}
}
}
}
И результат поиска
"hits": [
{
"_index": "partial",
"_type": "_doc",
"_id": "2",
"_score": 0.0,
"_source": {. --> not `foo` is removed.
"my_filter": "bar"
}
}
]