如何解决正确使用Laravel Scout Elasticsearch“ babenkoivan / scout-elasticsearch-driver”包上的“不得”搜索规则的语法
我正在尝试在Elasticsearch的顶部使用Laravel Scout和must_not
在搜索中添加babenkoivan/scout-elasticsearch-driver
子句。
想法是排除sold
字段的时间戳超过14天或大于零的所有结果。
但是,我似乎无法获得正确的语法,并且在软件包存储库上也没有关于如何执行此操作的文档。我尝试像在Elasticsearch文档中那样格式化它,但这是不正确的。
这是一组规则:
public function buildQueryPayload()
{
$query = $this->builder->query;
return [
'must' => [
'query_string' => [
'query' => $query,],'must_not' => [
'term' => [
'visible' => 0
],'range' => [
'sold' => [
'lte' => time() - 1209601,// 14 days ago plus 1 second
'gte' => 0
]
]
],'should' => [
...
],];
}
当前我遇到Elasticsearch\Common\Exceptions\BadRequest400Exception
错误。
这是抱怨语法的错误:
{
"error":{
"root_cause":[
{
"type":"parsing_exception","reason":"[term] malformed query,expected [END_OBJECT] but found [FIELD_NAME]","line":1,"col":97
}
],"type":"parsing_exception","col":97
},"status":400
}
有什么想法可以让我们记录下来以备后用吗?谢谢!
解决方法
尝试将“term”替换为“match”。