【问题标题】:Elasticsearch MongoDb river reference handlingElasticsearch MongoDb 河流参考处理
【发布时间】:2014-09-21 07:11:28
【问题描述】:

我遵循了这个 mongodb 示例:http://doctrine-mongodb-odm.readthedocs.org/en/latest/tutorials/getting-started.html

我还在我的 elasticsearch 中安装了一个 mongodb 河:https://github.com/richardwilly98/elasticsearch-river-mongodb

一切正常,一个用户实体在 mongodb 中有几个帖子实体。当我研究弹性搜索时,有以下数据结构:

{
    "_index": "doctrine",
    "_type": "user",
    "_id": "53d7f246e2afecdc03d63af3",
    "_score": 1,
    "_source": {
       "_id": "53d7f246e2afecdc03d63af3",
       "email": "email@example.com",
       "name": "Bulat S.",
       "posts": [
          "{ \"$ref\" : \"BlogPost\", \"$id\" : \"53d7f246e2afecdc03d63af1\" }",
          "{ \"$ref\" : \"BlogPost\", \"$id\" : \"53d7f246e2afecdc03d63af2\" }"
       ]
    }
 }

这看起来也很不错。但我想知道对帖子的引用。我能想象到的最简单的事情就是一个简单的帖子 ID 数组,比如"posts": ["53d7f246e2afecdc03d63af1", "53d7f246e2afecdc03d63af2"]。这将使搜索变得非常容易。但是我怎样才能处理河边提供的标记呢?在posts 字段中搜索是否有很好的查询?为什么" 被转义了?

【问题讨论】:

    标签: mongodb search elasticsearch relation


    【解决方案1】:

    双引号被转义,因为它们在另一组双引号内。如果它们没有被转义,它将过早地发出字符串结束的信号。

    您看到DBRefs 存储在posts 字段中的原因是因为Doctrine 使用它们来映射关系。结帐Doctrine - Simple References 仅用于存储ObjectId

    【讨论】:

    • 但是简单的引用只适用于同类型文档的关系,对吧?教义是否仍然适用于用户/博文关系和简单引用?
    • DBRef$ref 字段包含您正在引用可以存储在多个不同集合中的文档的用例的集合名称。简单引用仅适用于“对单个集合的文档的引用”。由于您仅在 post 字段中引用 BlogPost 集合,因此您可以使用简单引用。这有意义吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-18
    • 1970-01-01
    • 1970-01-01
    • 2015-07-27
    • 1970-01-01
    • 2014-10-22
    • 1970-01-01
    相关资源
    最近更新 更多