我们正在考虑对Elastic Search中存储的项目进行耦合。在建立索引时,我们在项目doc中为项目的耦合信息建立索引。有没有一种方法可以查询 Elasticsearch ,以便将耦合的项目合并到结果中?
例如:
item1 = {
...
coupled_item: item2
...
}
item2 = {
...
coupled_item: item1
...
}
query_result = [item3, item6, item1, item2, item4, item5]
方法1
我们认为的一种方法是在项目doc中添加
score
键,并将耦合产品的得分设置为相等,然后在查询时按该得分对其进行排序。缺点
我们已经在使用这种技术进行排序,我们不想阻止该顺序,我们只想将已耦合项目从其位置插入到项目下方。
方法2
我们认为的另一种方法是从ES查询所有项目,然后通过代码对其进行处理。
缺点
缺点是这不是最佳解决方案,在这种情况下,我们还需要自己处理分页。
Elastic Search提供了一项功能来内部处理耦合吗?如果没有,那么我们还有其他方法可以解决这个问题。
最佳答案
耦合的(相关的)文档可以在彼此内部重复。
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
关于sorting - Elasticsearch 中的耦合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58852363/