弹性搜索中的耦合

时间:2019-11-14 08:29:01

标签: sorting elasticsearch coupling

我们正在考虑对Elastic Search中存储的项目进行耦合。在建立索引时,我们在项目doc中为项目的耦合信息建立索引。有没有一种方法可以查询弹性搜索,以便将耦合的项目合并到结果中?

例如:

item1 = {
    ...
    coupled_item: item2
    ...
}

item2 = {
    ...
    coupled_item: item1
    ...
}

query_result = [item3, item6, item1, item2, item4, item5]

方法1

我们认为的一种方法是在商品文档中添加一个score键,并将耦合产品的得分设置为相等,然后在查询时按该得分对其进行排序。

缺点

我们已经在使用这种技术进行排序,我们不想阻碍该顺序,我们只想将已耦合项目从其位置插入到项目下方。

方法2

我们认为的另一种方法是从ES查询所有项目,然后通过代码对其进行处理。

缺点

缺点是,这不是最佳解决方案,在这种情况下,我们还需要自行处理分页。

Elastic Search是否提供了一项功能以在内部处理耦合。如果没有,那么我们还有其他方法可以解决这个问题。

1 个答案:

答案 0 :(得分:0)

耦合的(相关的)文档可以在彼此内部重复。

    item1 = {
        id: item1
        coupled_item: {
            id: item2 
        }
        ...
    }

    item2 = {
        id: item2
        coupled_item: {
            id: item1 
        }
        ...
    }

es_query_result = [item1 {item2}, item3 {item4}, item5 {item6}]

application_flattened_result = [item1, item2, item3, item4, item5, item6]

这将给文档写入带来一些挑战,因为现在两个文档将通过两个请求进行更新,但是可以完成。此外,搜索查询的分页也会变得棘手。

据我所知,只有内部支持的功能足够接近--https://www.elastic.co/guide/en/elasticsearch/reference/current/nested.html