我有以下Elasticsearch查询(通常更大,但去除了导致问题的部分):
'query' => [
'bool' => [
'must' => [
'query_string' => [
'query' => $keywords,
'fields' => ['title']
]
],
'filter' => [
'term' => [
'school_id' => 1
]
]
]
]
但是,如果我删除过滤器,则可以正常工作,但是我想要的是仅过滤具有特定学校ID的搜索。
最佳答案
您为什么不选择过滤数据,而不是只过滤数据呢?
如果您想知道文档字段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"
}
}
}
]
}
}
}
关于elasticsearch - 带有过滤器的ElasticSearch query_string无法获取结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53133812/