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

标签 mongodb solr indexing

有没有办法让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/

相关文章:

tomcat - solr 3.6 可以与 tomcat 6 一起正常工作吗

java - Solr 管理员给出 404 错误

python - (Python) 列表索引超出范围 - 迭代

python-3.x - 绘图时的 Matplotlib 索引错误

mongodb - 如何使用官方Go驱动程序在MongoDB中持久存储文件(小于16MB)

mongodb - celery 与 mongoDB 的工作示例

lucene - 优化期间的 Solr %100 写入可用性

mysql不使用索引?

node.js - 如何使用 Node.Js 在 MongoDB 中插入或更新数组?

mongodb - 如何按日期获取唯一约束的最早记录?