我们正在通过电子商务应用程序实施solr。主要目标是更快的搜索和更好的分面目录导航。
问题是,我们无法弄清楚如何将动态方面映射到Solr。当我说动态方面时,我的意思是......
三星Galaxy S3
过滤条件,如操作系统,内存,处理器,相机等,对于每个产品都是动态的,有些拥有它,有些则具有完全不同的过滤条件。因此,当有人点击Android时,将使用所选类别中的所有Android手机过滤结果。
我们面临的一个问题是,我们无法确定solr schema.xml对支持分面搜索的这种数据字典的看法。
答案 0 :(得分:4)
动态字段是您所需要的。
你甚至可以这样做:
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/
答案 1 :(得分:2)
扩展上面的答案。
您可以使用isSpecial,boolean,specialCategoryType等字段。在上面的例子中,它们被设置为true和android。
当选择此项(isSpecial)时,您可以优化查询并添加到谓词specialCategoryType:android。
编辑:
让我们说有两款产品,一款Android手机和一款Android笔记本电脑。 手机1- os:android;类型:电话;摄像头:800万像素; specCatFacet:os,type,camera; specCatRefine:os,类型 laptop- os:android;类型:膝上型电脑;屏幕尺寸:13; specCatFacet:OS,类型,屏幕; specCatRefine:os,类型 phone 2 - os:android;类型:电话;摄像头:4MP; specCatFacet:os,type,camera; specCatRefine:os,type
当人们搜索android时,三者都会出现。显示的方面可以是两组方面的并集。
单击phone1或2时,您将查看specCatRefine字段,并使用os优化搜索条件,键入并使用specCatFacet随后对其进行构面。
当点击笔记本电脑时,搜索会在操作系统上进行优化,在操作系统,类型,屏幕上进行类型和分面。
基本上,第二个搜索词细化和构面基于每个文档中的字段。您的搜索词精炼将有很多关于如何创建标准的逻辑。
希望这会有所帮助......