Точное совпадение по всем полям в индексе с фильтрами - PullRequest
0 голосов
/ 06 июня 2018

Я создаю поисковую систему, с помощью которой пользователь может выбрать точный термин, если он хочет использовать цитаты.Например, поиск по "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 }.Полная трассировка стека приведена ниже:

enter image description here

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...