gpt4 book ai didi

mongodb - 使用 Solr 索引嵌入的 mongoDB 文档(在数组中)

转载 作者:行者123 更新时间:2023-12-04 04:38:43 25 4
gpt4 key购买 nike

有什么办法,我怎样才能使 Solr 索引嵌入 mongoDB 文档?我们已经可以通过 mongo-connector 索引 mongo 文档中键的顶级值,将数据推送到 Solr。

但是,在这种表示帖子的结构中的情况下:

{
author: "someone",
post_text : "some really long text which is already indexed by solr",
comments : [
{
author:"someone else"
comment_text:"some quite long comment, which I do not
know how to index in Solr"
},
{
author:"me"
comment_text:"another quite long comment, which I do not
know how to index in Solr"
}
]
}

这只是一个示例结构。在我们的项目中,我们处理更复杂的结构,有时,我们想要索引的文本嵌套在第二或第三层(深度,或者它的正式名称是什么)。

我相信有一个由 mongoDB + Solr 用户组成的社区,所以这个问题之前肯定已经解决过,但是我找不到可以解决这个问题的好 Material ,如果有一个好的方法,如何处理这个或是否没有解决方案和解决方法尚未建立(也许你可以提供给我)

为了更好地理解,我们的一个结构具有顶级键,其值具有一些分析结果的数组,其中一个具有奇异值数组,它们是结果的一部分。我们需要索引这些值。例如。 (这不是我们使用的实际数据结构):
{... 
Analysis_performed: [
{
User_tags:
[
{
tag_name: "awesome",
tag_score: 180
},
{
tag_name: "boring",
tag_score: 10
}
]
}
]
}

在这种情况下,我们需要对标签名称进行索引。有可能我们的数据存储结构不好,我们想存储,但我们仔细考虑了一下,我们认为它非常好。然而,即使我们切换到较少嵌套的信息,我们也很可能会遇到至少一种情况,即我们必须索引存储在数组中的嵌入文档中的信息,这是问题的主要焦点。我们可以用 SOLR 以某种方式索引这些数据吗?

最佳答案

几个月前我有一个这样的问题。我的解决方案是使用 doc_manager。
您可以使用 solr_doc_manager(upsert 方法),修改发布到 solr 中的文档。例如,如果你有

ACL: {
Read: [ id1, id2 ... ]
}

你可以像这样处理它
def upsert(self, doc):
if ("ACL" in doc) and ("Read" in doc["ACL"]):
doc["ACL.Read"] = []
for item in doc["ACL"]["Read"]:
if not isinstance(item, dict):
id = ObjectId(item)
doc["ACL.Read"].append(str(id))
self.solr.add([doc], commit=False)

它添加了新字段 - ACL.Read。此字段是多值的,并存储来自 ACL 的 id 列表:{ Read: [ ... ] }

如果您不想为嵌套文档编写自己的处理程序,您可以尝试另一个 mongo 连接器。 Github 项目页面 https://github.com/SelfishInc/solr-mongo-connector .它支持开箱即用的嵌套文档。

关于mongodb - 使用 Solr 索引嵌入的 mongoDB 文档(在数组中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19260527/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com