0

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

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

三星Galaxy S3

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

过滤标准,如操作系统、RAM、处理器、相机等,对每个产品都是动态的,有些有,有些则有完全不同的方面过滤标准集。因此,当有人点击 Android 时,将使用所选类别中的所有 android 手机过滤结果。

我们面临一个问题,即我们无法确定 solr schema.xml 将是什么样子来支持这种用于分面搜索的数据字典。

4

2 回答 2

4

动态字段是您所需要的。

你甚至可以这样做:

product_name : samsung nexus
android_version_t : 4.0
partner_store_price_i : 19800

如果您以这种方式设置架构,则 and 后缀将被理解为文本和整数类型_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

于 2012-06-13T07:07:06.233 回答
2

扩展上面的答案。

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

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

编辑:

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

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

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

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

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

希望这可以帮助...

于 2012-06-13T01:21:22.217 回答