【问题标题】:Elasticsearch filter results excluding by idElasticsearch 过滤结果,不包括按 id
【发布时间】:2015-12-16 02:22:30
【问题描述】:

我需要返回不包含具有特定 ID 的文档的结果。 Elasticsearch 允许我们指定允许使用哪些 id,但我认为没有办法禁止某些 id。就我而言,我不想返回用户已经看过的东西,因此每个用户的列表都会有所不同。

【问题讨论】:

  • 是否有特定原因需要禁止某些 ID。这些场景的一般方法通常根据文档的内容过滤结果。您也可以提供 id 作为该文档的字段,并使用正确的查询排除这些文档
  • 这不是一个搜索应用,而是一个推荐器。我排除,因为用户已经购买了项目 ID(例如)。 doc id 可以被视为一个字段,因为它也存储在一个字段中。

标签: lucene elasticsearch


【解决方案1】:

您可以通过添加一个 bool/must_not 过滤器来实现此目的,该过滤器包含一个带有您不想出现的 id 数组的 ids 过滤器,如下所示:

{
  "query": {
    "bool": {
      "must": [
         ...                    <--- your other filters go here
      ],
      "must_not": [
        {
          "ids": {
            "values": [
              "id1", "id2"      <--- add all the ids you DON'T want in here
            ]
          }
        }
      ]
    }
  }
}

【讨论】:

  • 我将这个结构用于 should 和 must ,所以它会很好地工作。这假设 id 已编入索引,对吧?
  • 为了他人的利益,不必明确索引 id。见:elastic.co/guide/en/elasticsearch/reference/current/…
  • 对于使用驱动程序的人,请确保您的 ID 列表是字符串,而不是像 ObjectId() 这样的对象
猜你喜欢
  • 2021-10-15
  • 2015-10-06
  • 1970-01-01
  • 1970-01-01
  • 2016-04-26
  • 2018-03-01
  • 1970-01-01
  • 2018-06-13
  • 2012-08-30
相关资源
最近更新 更多