【问题标题】:How to index rows like columns in Solr如何在 Solr 中像列一样索引行
【发布时间】:2011-11-30 22:29:28
【问题描述】:

我的数据库中有一个产品表,以及一个包含该产品特性的表。特征表有 3 列:id、type 和 value。 Id 是产品的外键。 我的表上的数据示例: 餐桌产品:

ID |说明 |

01 电脑A

02 车

03 电脑B

表格特点:

ID |类型 |价值 |

01 处理器 Phenom X3

01 内存 2GB

01 硬盘 500GB

02 蓝色

02 马克福特

03 处理器 Phenom X3

03 内存 3GB

我想要最好的索引方式,所以举个例子,当有人搜索“计算机”时,分面显示:

飞鸿 X3(2)

内存 2GB(1)

内存 3GB(1)

硬盘 500GB(1)

等等,与查询字符串有关。如果我使用字符串“processor”进行查询,只有当该产品(描述中带有“processor”)具有处理器:Phenom X3 之类的功能时,它才会列出 Phenom X3(1)。产品类型很多,因此我们无法为所有功能创建静态列并将其传递给 Solr…… 我希望我的问题很清楚,提前谢谢!

【问题讨论】:

    标签: solr indexing rows


    【解决方案1】:

    使用数据导入处理程序索引数据@http://wiki.apache.org/solr/DataImportHandler

    您可以将产品表定义为主实体,将特征定义为子实体。以便将具有特征的产品作为单个文档进行索引。

    对于索引 - 将描述字段定义为索引 true 由于您想要关于类型和值的方面,您可以使用类型字符串定义一个新字段 type_value 并在 dataconfig.xml 中连接类型和值字段 type_value 将是一个多值字段。

    对于搜索 - 使产品描述字段可搜索,例如q=描述:计算机
    您可以在 solrconfig.xml 中使用适当的权重进行配置

    将 features 字段定义为 facet 字段和 facet.field=type_value

    我希望这是一个公平的想法。

    【讨论】:

    • 太好了,帮了大忙。我已经用 templatetransformer 完成了 concat,但似乎 type_value 字段下的数据索引错误。我得到“amd phenom X 3 intel I 5”(全部剥离)而不是“Amd:Phenomx3 intel:i5”。此外,还有一种方法可以在返回行时检查 Solr 索引的内容,例如对 DB 的查询?
    • 好的,经过一番研究,我找到了答案:使用了分词器类 solr.KeywordTokenizerFactory。这使得 concat 工作得很好( solr.WhitespaceTokenizerFactory 拆分每个空格)。另外,我正在使用 Luke 来查看索引的内容。我认为还有另一种方法可以做到这一点,但我对他的所作所为感到满意。谢谢!
    猜你喜欢
    • 2014-02-07
    • 2011-10-22
    • 1970-01-01
    • 1970-01-01
    • 2011-02-17
    • 2014-10-03
    • 2019-02-07
    • 2013-07-29
    • 2017-08-25
    相关资源
    最近更新 更多