我是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"}
提前致谢。
答案 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命令/函数。