Я создаю поисковую систему, с помощью которой пользователь может выбрать точный термин, если он хочет использовать цитаты.Например, поиск по "foo" bar
даст точное совпадение по * 1002. * по всем полям.
Я частично работал с multi_match
, но я не смог указать также, чтобы соответствовать порядку терминов:
{
"index": [],
"body": {
"query": {
"bool": {
"must": [
{
"multi_match": {
"query": "foo",
"operator": "and"
}
}
],
"should": [
...
]
}
}
}
}
Это нежелательно, так как я не могу указать, чтобы поддерживать порядок условий.Например, я пытался найти точное совпадение "foo bar"
, тогда это вернуло бы результаты, которые содержали "bar foo"
в одном из их полей.
Что касается should
, запросы могут или не могут быть здесь в зависимости отто, что пользователь искал, но это стандартное Query String Query / match.
Я сейчас собираюсь использовать filter
s, поскольку Elasticsearch рекомендует .Мой текущий запрос (взят из примера) :
{
"index": [],
"body": {
"query": {
"constant_score": {
"filter": [
{
"term": {
"_all": "foo"
}
}
]
},
"match_all": {}
}
}
}
filter
- это массив, который пользователь может указать для точного совпадения по нескольким различным терминам / фразам.Например, поиск "foo bar" hello "world"
будет производить что-то вроде:
"filter": [
{
"term": {
"_all": "foo bar"
}
},
{
"term": {
"_all": "world"
}
}
]
Я получаю ошибку [parsing_exception] unexpected token [START_ARRAY], with { line=1 & col=38 }
.Полная трассировка стека приведена ниже:

Я не уверен, нужен ли match_all
, я просто бросил это туда, как я не былне получаю никакого вывода.