elasticsearch - 带有过滤器的ElasticSearch query_string无法获取结果

标签 elasticsearch

我有以下Elasticsearch查询(通常更大,但去除了导致问题的部分):

'query' => [
    'bool' => [
        'must' => [
            'query_string' => [
                'query' => $keywords,
                'fields' => ['title']
            ]
        ],
        'filter' => [
             'term' => [
                'school_id' => 1
            ]
         ]
    ]
]

但是,如果我删除过滤器,则可以正常工作,但是我想要的是仅过滤具有特定学校ID的搜索。

最佳答案

您为什么不选择过滤数据,而不是只过滤数据呢?

如果您想知道文档字段school_id是否为1,则从某种意义上说,过滤用于二进制结果。如果您只想获得结果,还有其他方法可以做到。

就您而言,我认为您只是“跳过”了mustbool,这就是查询失败的原因。

因此,您有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/

相关文章:

apache-spark - 分析输入数据并查找大数据中的输入错误

elasticsearch - 将第二个主节点添加到现有Elasticsearch节点的正确方法

python-3.x - 正确的方法来删除然后重新索引ES文档

elasticsearch - 嵌套聚合:如何获取聚合对象的属性

elasticsearch - 在Elasticsearch中使用预定义的geo_shapes创建文档

elasticsearch - Elasticsearch将文档字段值从整数更新为字符串

ruby - 使用Logstash和Ruby提取嵌套对象

elasticsearch - 如何在elasticsearch中通过ID删除多个文档?

ElasticsearchIllegalArgumentException 名称无特征

elasticsearch - Elasticsearch Docker容器在启动时挂起而没有错误