我有以下Elasticsearch查询(通常更大,但去除了导致问题的部分):
'query' => [
'bool' => [
'must' => [
'query_string' => [
'query' => $keywords,
'fields' => ['title']
]
],
'filter' => [
'term' => [
'school_id' => 1
]
]
]
]
但是,如果我删除过滤器,则可以正常工作,但是我想要的是仅过滤具有特定学校ID的搜索。
答案 0 :(得分:1)
为什么不选择过滤数据-首先处理所需的数据呢?
某种意义上说,过滤是用于二进制结果的,如果您想知道文档字段school_id
是否为1
。如果您只想获得结果,还有其他方法可以做到。
在您的情况下,我认为您只是跳过了must
和bool
,这就是查询失败的原因。
这样,您有2个选择,第一个可以如下解决:
GET /_search
{
"query": {
"bool": {
"must": {
"query_string": {
"default_field": "keywords",
"query": "title"
}
},
"filter": {
"bool": {
"must": [
{
"term": {
"school_id": "1"
}
}
]
}
}
}
}
}
或如果您希望对结果进行评分,可以使用以下一项:
GET /_search
{
"query": {
"bool": {
"must": [
{
"query_string": {
"default_field": "keywords",
"query": "title"
}
},
{
"match": {
"school_id": {
"query": "1"
}
}
}
]
}
}
}