我有一个用于弹性搜索的查询。 我正在写这样的查询。
$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个字段的数据在底部。我实际上想在顶部看到它。
我该怎么做?
答案 0 :(得分:1)
您必须使用most_fields
类型而不是cross_fields
:
您可以在此处查看文档:{{3}}
most_fields
查找与任何字段匹配的文档,并结合_score 每个领域。请参阅most_fields。
跨领域
使用相同的分析仪处理字段,就好像它们是一个大字段一样 领域。在任何字段中查找每个单词。参见cross_fields。
most_fields
类型将添加匹配字段的分数,从而显着提高了不同字段中与查询匹配的文档。