我正在尝试使用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'
}
]
我现在要解决的问题是:
product-categories
检索category_id设置为category_id-1
的所有文档。products
索引以过滤有效产品。问题是我觉得此解决方案的扩展性不是很好。
如果我需要对结果进行分页,我仍然必须查询该类别的所有产品,以便能够构造依赖于第二个查询的最终分页。 (如果我想要10个最终结果,我仍然必须在第一个请求中查询至少100个产品,以确保在第二个查询中,这100个产品中至少有10个产品可用。)
我从this page阅读了有关“术语查找机制”的信息,但是遇到一些问题,以了解它是否适合我的用例。
您将如何做到?
如果您告诉我其他结构可以帮助我解决问题,则可以更改我的ElasticSearch结构。