Laravel的一个项目,更详细:用于Laravel Nova
搜索。
我在ES
中有一个模型规则,用于查找特定的Model
记录。它具有以下规则
namespace App\Elastic\Rules;
use ScoutElastic\SearchRule;
class BusinessSearch extends SearchRule
/**
* @inheritdoc
*/
public function buildHighlightPayload()
{
return [
'fields' => [
'name' => [
'type' => 'plain'
]
]
];
}
/**
* @inheritdoc
*/
public function buildQueryPayload()
{
$query = $this->builder->query;
return [
'should' => [
[
'multi_match' => [
'query' => $query,
'fuzziness' => 5
]
],
[
'nested' => [
'path' => 'categories',
'query' => [
'bool' => [
'must' => [
'match' => [
'categories.name' => $query
]
]
]
]
]
]
]
];
}
我需要以某种方式向此功能添加以下内容:
当用户在引号中键入值时,它必须执行exact search
,否则必须像现在一样执行fuzziness
。关于实现这些东西有什么想法吗?谢谢。
答案 0 :(得分:0)
我没有根据要为这种情况提供什么样的输入用户来执行什么查询,而是创建了以下通用查询,并且我认为这足以满足您的要求。
POST testindex/_search
{
"query":{
"bool":{
"should":[
{
"bool":{
"must":{
"multi_match":{
"query":"something",
"fields":[ "field_1", "field_2" ]
}
}
}
},
{
"bool":{
"must":{
"multi_match":{
"query":"something",
"fields":[ "field_1", "field_2" ],
"fuzziness": 5
}
}
}
}
]
}
}
}
为简单起见,上述查询类似于以下内容
bool:
should:
bool:
- must [ exact query ]
bool:
- must [ fuzzy query ]
这两个查询都将对所有输入执行,但是如果exact query
没有给您结果,则fuzzy query
将为您返回结果。
现在,如果exact query
确实返回了结果,则fuzzy query
可能还会为您提供结果,除了exact query
命中的结果最终将具有更高的relevancy
或_score
,因此将显示在搜索结果的顶部。
让我知道是否有帮助!