【问题标题】:Solr Schema.xml for Faceted Search用于分面搜索的 Solr Schema.xml
【发布时间】:2012-06-15 09:53:03
【问题描述】:

我们正在使用电子商务应用程序实施 solr。主要目标是更快的搜索和更好的多面目录导航。

但问题是,我们无法弄清楚如何将动态构面映射到 Solr。当我说动态方面时,我的意思是......

三星 Galaxy S3

  • 类别:智能手机
  • 品牌:三星
  • 操作系统:Android
  • 内存:1 GB
  • 处理器:1 Ghz
  • 相机:8MP
  • 显示屏:4.7 英寸
  • 等等..

过滤条件,如操作系统、RAM、处理器、摄像头等,对每个产品都是动态的,有些产品有,有些则有一组完全不同的方面过滤条件。因此,当有人点击 Android 时,将筛选出所选类别中的所有 Android 手机的结果。

我们面临一个问题,即我们无法确定 solr schema.xml 的外观以支持这种用于分面搜索的数据字典。

【问题讨论】:

  • 添加一个您将如何解决此类问题的示例,将是一个非常有价值的答案。

标签: solr e-commerce solrnet faceted-search


【解决方案1】:

扩展上面的答案。

您可以拥有诸如 isSpecial、布尔值、specialCategoryType 等字段。在上述情况下,它们被设置为 true 和 android.

选择此项时 (isSpecial),您可以优化查询并添加到谓词 specialCategoryType:android。

编辑:

假设有两种产品,一款安卓手机和一款安卓笔记本电脑。 手机 1- 操作系统:安卓;类型:电话;摄像头:8MP; specCatFacet:操作系统,类型,相机; specCatRefine:操作系统,类型 笔记本电脑 - 操作系统:安卓;类型:笔记本电脑;屏幕尺寸:13; specCatFacet:操作系统,类型,屏幕; specCatRefine:操作系统,类型 电话 2 - 操作系统:安卓;类型:电话;摄像头:4MP; specCatFacet:操作系统,类型,相机; specCatRefine:os,类型

当人们搜索 android 时,这三个都会出现。显示的分面可以是两组分面的并集。

当点击 phone1 或 2 时,您将查看 specCatRefine 字段,并使用 os 优化搜索条件,键入并使用 specCatFacet 随后对它们进行分面。

当点击笔记本电脑时,搜索会在 os, type 上进行细化,并在 os, type, screen 上进行分面。

本质上,第二个搜索词细化和分面是基于每个文档中的一个字段。您的搜索词精炼将有很多关于如何创建条件的逻辑。

希望这会有所帮助...

【讨论】:

  • 您好,请您详细说明一下……没完全明白您的意思。
  • 当用户点击某个产品类型时,您希望通过附加该产品类型来细化用户的原始条件。您只想对某些特殊类型(我假设)执行此操作。所以,布尔类型定义了这是否是特殊类型,第二个定义了值。本质上,我认为不需要“动态”方面,而是改进搜索条件。
  • 这个我也没有看懂……你能举例说明一下吗?
  • 一个例子对我也很有帮助。
【解决方案2】:

动态字段是您所需要的。

你甚至可以这样做:

product_name : samsung nexus
android_version_t : 4.0
partner_store_price_i : 19800

如果您以这种方式设置架构,_t_i 后缀将被理解为文本和整数类型。

<dynamicField name="*_i"  type="int"    indexed="true"  stored="true"/>
<dynamicField name="*_s"  type="string"  indexed="true"  stored="true"/>
<dynamicField name="*_l"  type="long"   indexed="true"  stored="true"/>
<dynamicField name="*_t"  type="text"    indexed="true"  stored="true"/>

http://www.tnrglobal.com/blog/2010/07/dynamic-fields-in-apache-solr/

http://wiki.apache.org/solr/SchemaXml#Dynamic_fields

【讨论】:

  • Aitchnyu,我也面临着类似的问题。这是否意味着,对于应用于需要过滤的产品的每个此类动态属性,我需要将它们作为动态字段?分面搜索呢?这需要在 schema.xml 中定义吗?
  • 是的,需要定义。这些恰好带有默认模式。如果有一个索引需要存储大量字段,那就方便了
  • 你说“如果有一个索引需要存储大量字段就很方便”是什么意思?
  • 嗯,您的产品可能有大约 100 个属性,当您第一次创建索引时,您可能事先没有想到。您可以使用动态字段,而不是频繁更新架构。
猜你喜欢
  • 1970-01-01
  • 2015-07-15
  • 1970-01-01
  • 1970-01-01
  • 2013-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多