根据其他索引中的信息过滤文档

时间:2018-11-16 14:47:19

标签: elasticsearch

我正在尝试使用ElasticSearch解决某些问题,并且需要通过另一个索引中包含的信息来过滤文档。我很清楚,我的问题可以在关系数据库环境中轻松解决,但是我必须使用ElasticSearch来解决此问题。

所以我有一个products索引,其中包含具有active布尔字段的产品列表:

const products = [
    {
        _id: 'product_id-1',
        active: true
    },
    {
        _id: 'product_id-2',
        active: false
    }
]

我还有另一个索引,其中包含产品的_id和类别的_id之间的关联:

const productCategories = [
    {
        _id: 'category_id-1:product_id-1',
        product_id: 'product_id-1',
        category_id: 'category_id-1'
    },
    {
        _id: 'category_id-1:product_id-2',
        product_id: 'product_id-2',
        category_id: 'category_id-1'
    },
    {
        _id: 'category_id-2:product_id-1',
        product_id: 'product_id-1',
        category_id: 'category_id-2'
    }
]

我需要做的是从category_id-1中检索所有具有active产品的文档。最终结果是我提供的一组文档:

const response = [
    {
        _id: 'category_id-1:product_id-1',
        product_id: 'product_id-1',
        category_id: 'category_id-1'
    }
]

我现在要解决的问题是:

  1. product-categories检索category_id设置为category_id-1的所有文档。
  2. 查询products索引以过滤有效产品。
  3. 使用Java脚本将第二个查询的结果过滤到第一个查询。

问题是我觉得此解决方案的扩展性不是很好。

如果我需要对结果进行分页,我仍然必须查询该类别的所有产品,以便能够构造依赖于第二个查询的最终分页。 (如果我想要10个最终结果,我仍然必须在第一个请求中查询至少100个产品,以确保在第二个查询中,这100个产品中至少有10个产品可用。)

我从this page阅读了有关“术语查找机制”的信息,但是遇到一些问题,以了解它是否适​​合我的用例。

您将如何做到?

如果您告诉我其他结构可以帮助我解决问题,则可以更改我的ElasticSearch结构。

0 个答案:

没有答案