【问题标题】:nested field in Solr 5.2Solr 5.2 中的嵌套字段
【发布时间】:2015-08-08 01:44:42
【问题描述】:

我是 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"}

提前致谢。

【问题讨论】:

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

标签: indexing nested field multivalue


【解决方案1】:

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

"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 字段是一个多值字段。因此,请确保在使用上述过程索引文档之前先修改架构。否则,它会给出一个错误,说 f.不是多值字段。

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

【讨论】:

    最近更新 更多