Mongodb 在Lucene中存储结构化数据

Mongodb 在Lucene中存储结构化数据,mongodb,search,solr,lucene,nosql,Mongodb,Search,Solr,Lucene,Nosql,我已经看到许多参考文献指出使用Lucene或Solr作为NoSQL数据存储,而不仅仅是索引引擎: 然而,由于Lucene只提供了一个“平面”文档结构,其中每个字段都可以是多值(标量),因此我似乎无法完全理解人们是如何将复杂的结构化数据映射到Lucene中进行索引和存储的。例如: { "firstName": "Joe", "lastName": "Smith", "addresses" : [ { "type" : "home", "line1" :

我已经看到许多参考文献指出使用Lucene或Solr作为NoSQL数据存储,而不仅仅是索引引擎:

然而,由于Lucene只提供了一个“平面”文档结构,其中每个字段都可以是多值(标量),因此我似乎无法完全理解人们是如何将复杂的结构化数据映射到Lucene中进行索引和存储的。例如:

{
"firstName": "Joe",
"lastName": "Smith",
"addresses" : [
    {
        "type" : "home", 
        "line1" : "1 Main Street",
        "city" : "New York",
    },
    {
        "type" : "office",
        "line1" : "P.O. Box 1234",
        "zip:“10000”
    }
]
}
事情显然会变得更复杂。例如,如果对象有两个集合:地址和电话号码,该怎么办?如果地址本身有一个集合怎么办

我可以想出两种方法来映射这两个lucene“文档”:

  • 创建一个已存储但未索引的字段以存储对象的JSON/BSON版本,然后创建其他索引但不存储字段以进行索引/搜索

  • 找到一种聪明的方法,以某种方式将对象放入Lucene存储数据的方式。也就是说,使用点表示法来平整字段,使用多值字段来存储单个集合值,然后在返回的过程中以某种方式重新创建对象


  • 我想知道以前是否有人处理过类似的问题,您使用过什么解决方案?

    请查看我的“一对一”方法。

    这取决于用法。 如果只需要显示,可以将复杂值(地址)转换为JSON字符串并存储为多值字段,如果需要将其用作索引,可以选择以下结构:

    "addresses_type": [ "home", "office" ], "addresses_line1": [ "1 Main Street", "P.O. Box 1234" ], "addresses_city": [ "New York", "" ], "addresses_zip": [ "", "10000" ] “地址类型”:[ “家”, “办公室” ], “地址第1行”:[ “主街1号”, “邮政信箱1234” ], “城市地址”:[ “纽约”, "" ], “地址”:[ "", "10000" ]
    在ES中存储多维数组对象是可能的。如果你想使用solr,那么你必须将多维数组作为json编码的字符串存储在字段type-string中,index=false,stored=truel,我想EC只做1。在上面i、 e.使用_source字段存储实际JSON,无索引;然后使用其他映射字段进行索引/搜索。有关ES
    http://www.elasticsearch.org/guide/reference/mapping/array-type/