有没有办法让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 列表:{ 读:[ ... ] }
如果您不想为嵌套文档编写自己的处理程序,您可以尝试另一个 mongo 连接器。 Github项目页面https://github.com/SelfishInc/solr-mongo-connector 。它支持开箱即用的嵌套文档。
关于mongodb - 使用 Solr 索引嵌入式 mongoDB 文档(在数组中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19260527/