在Lucene中存储结构化数据
我看到很多参考文献指出使用Lucene或Solr作为NoSQL数据存储,而不仅仅是索引引擎:NoSQL(MongoDB)vs Lucene(或Solr)作为数据库http://searchhub.org/2010/04/ 29 /换了,守护者,Solr的,是最新的数据库/
然而,因为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存储数据的方式。 即使用点符号来平整字段,使用多值字段来存储单个集合值,然后以某种方式重新创建对象的方式...
我想知道人们以前是否遇到过类似的问题,以及您使用了哪些解决方案?
看看我的愚蠢的Lucene技巧:一种方法的层次结构。
这取决于用途是什么。 如果您只需要显示它们,可以将复杂的值(地址)作为JSON字符串存储为多个值字段,如果需要将它们用作索引,则可以选择以下结构:
"addresses_type": [ "home", "office" ], "addresses_line1": [ "1 Main Street", "P.O. Box 1234" ], "addresses_city": [ "New York", "" ], "addresses_zip": [ "", "10000" ]链接地址: http://www.djcxy.com/p/86393.html