弹性搜索多场匹配问题

时间:2018-09-03 10:32:41

标签: elasticsearch

我有一个用于弹性搜索的查询。 我正在写这样的查询。

$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 :(得分:1)

您必须使用most_fields类型而不是cross_fields

您可以在此处查看文档:{​​{3}}

  

most_fields

     

查找与任何字段匹配的文档,并结合_score   每个领域。请参阅most_fields。

     

跨领域

     

使用相同的分析仪处理字段,就好像它们是一个大字段一样   领域。在任何字段中查找每个单词。参见cross_fields。

most_fields类型将添加匹配字段的分数,从而显着提高了不同字段中与查询匹配的文档。