задача согласования многопластовых упругого поиска - PullRequest
0 голосов
/ 03 сентября 2018

У меня есть запрос для упругого поиска. Я пишу запрос как этот.

$params = [
            'index' => config('elasticsearch.index'),
            'type' => $this->type,
            'body' => [
                'query' => [
                    'multi_match' => [
                        'query' => 'newyork john',
                        'type'=>'cross_fields',
                        'fields'=>['user','surname','location'],
                        'tie_breaker'=>'0.3',
                        'minimum_should_match'=>'10%',
                    ]
                ]
            ]
        ];

Например, этот запрос возвращает следующий результат.

id=>1
score => 0.9808292
user => nja
surname => foo
'location'=> newyork

//1 field matching

id=>2
score => 0.87546873
user => alex
surname => stephen
'location'=> newyork

//1 field matching

id=>3
score => 0.18232156,
user => alex
surname => john
'location'=> newyork

//2 field matching

но я хочу увидеть его сверху, если есть еще сколько полей. Этот запрос не делает этого. Соответствующие данные для поля 2 находятся внизу. Я действительно хочу видеть их сверху.

Как я могу это сделать?

1 Ответ

0 голосов
/ 03 сентября 2018

Вы должны использовать тип most_fields вместо cross_fields:

Вы можете увидеть документ здесь: https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-multi-match-query.html#multi-match-types

most_fields

Находит документы, которые соответствуют любому полю, и объединяет _score из каждое поле. Смотрите most_fields.

cross_fields

Обрабатывает поля одним и тем же анализатором, как если бы они были одним большим поле. Ищет каждое слово в любом поле. Смотрите cross_fields.

Тип most_fields добавит оценку совпадающих полей и, таким образом, значительно улучшит документы, соответствующие запросу в разных полях.

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