Solr 5.2中的嵌套字段

时间:2015-08-05 00:40:26

标签: indexing nested field multivalue

我是Solr的新手,我有一个非常具体的问题需要解决: 我有一个包含我的Solr文档的csv文件。现在,我确实有一个列(字段),它不仅是多值的,还包含'子字段' 例如

"id":"0101",
"addMaterials":[{"name":"Mat1", "property":"prop1"},          
    {"name":"Mat2","property":"prop2"},
    {"name":"Mat3","property":"prop3"}],
"mainProperty":"mainproperty1",
"URL":"http://www.mySite..."

其中id,addMaterials,mainProperty和URL是我的主要字段,而'name'和'property'是我的子字段。我知道Solr旨在处理非规范化文档,但非规范化不是我应用程序的可能解决方案。

我在想的是将数据集分开并将字段(包含子字段)移动到另一个文档,并以某种方式创建一个新字段以将其链接到原始文档(例如fromIdField)。

还有其他解决办法吗?我的最低目标是索引addMaterials字段的值(即使没有索引子字段)

从:

"addMaterials":[{"name":"Mat1", "property":"prop1"},          
    {"name":"Mat2","property":"prop2"},
    {"name":"Mat3","property":"prop3"}],

"addMaterials":{"name":"Mat1", "property":"prop1"}
"addMaterials":{"name":"Mat2", "property":"prop2"}
"addMaterials":{"name":"Mat3", "property":"prop3"}

提前致谢。

1 个答案:

答案 0 :(得分:0)

我找到了解决问题的方法。我将addMaterials字段保留为multiValued字段而忽略了子字段,而不是分离我的数据集。所以我只有一个multiValued字段要编入索引。我所做的是使用Solr的更新/请求来索引我的csv文件,并将},{作为我的分隔符添加到我的addMaterials multiValued字段中。索引文档如下所示:

"addMaterials": ["[{\"name\":\"Mat1\", \"property\":\"prop1\"",
                 "\"name\":\"Mat2\", \"property\":\"prop2\"",
                 "\"name\":\"Mat3\", \"property\":\"prop3\"}]"]

我使用这个索引我的文档:

curl "http://localhost:8983/solr/<coreName>/update/csv?
      stream.file=C:/userName/Solr/solr-5.2.0/documentFolder/myFile.csv&
      f.addMaterials.split=true&
      f.addMaterials.separator=\},\{&
      stream.contentType=text/plain;charset=utf-8"

此外,这假设addMaterials字段是multiValued字段。因此,请确保在使用上述过程索引文档之前先修改架构。否则,它将给出一个错误说f。不是multiValued字段。

当然,如果你需要查询子字段,那么我想你可以使用Solr的!join命令/函数。