我们有一个在线商店,我们在其中使用Solr搜索产品。基本设置可以正常运行,但是目前缺少一些功能。我查找了像Amazon这样的一些在线商店,并且喜欢它们提供的功能。所以我想,我该如何配置Solr为最终用户提供一些功能。
我们的产品数据包含类似产品的标准数据
现在,我们正在使用此架构文件来对Solr编制索引并执行查询:
<fieldType name="text" class="solr.TextField" omitNorms="false">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.WordDelimiterFilterFactory" catenateWords="1" catenateAll="1" preserveOriginal="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.WordDelimiterFilterFactory" catenateWords="1" catenateAll="1" preserveOriginal="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.PorterStemFilterFactory"/>
<filter class="solr.PhoneticFilterFactory" encoder="DoubleMetaphone" inject="true"/>
</analyzer>
</fieldType>
EdgeNGramFilterFactory
索引的字像shirt
成sh
,shi
,shir
,shirt
WordDelimiterFilterFactory
断了的话想wi-fi
成wi
,fi
,wifi
PorterStemFilterFactory
适用于阻止PhoneticFilterFactory
提供某种模糊搜索一个问题是,模糊搜索不能很好地工作。如果我搜索该书Inferno
并用拼写错误Infenro
,则搜索不会返回任何结果。我已经阅读过有关SpellCheckComponent
(http://wiki.apache.org/solr/SpellCheckComponent)的信息,但是我不确定这是否是进行模糊搜索的最佳方法,或者您是否表示?特征。
第二个问题是,应该可以搜索Shirts red
找到红色的T恤(其中红色是选项类型颜色的选项值)或搜索woman shoes
或adidas shoes woman
。Solr可以做到这一点吗?
第三个问题是,我不确定里面的分词器和过滤器schema.xml
是实现此类功能的好选择。
我希望有人在solr中使用过这些功能,并且在这种情况下可以为我提供帮助。谢谢!
编辑
这是一些我们存储在Solr中的数据:
<doc>
<str name="id">572</str>
<arr name="taxons">
<str>cat1</str>
<str>cat1/cat2</str>
<str>cat1/cat2/cat3</str>
<str>cat1/cat4</str>
</arr>
<arr name="options">
<str>color_blue</str>
<str>color_red</str>
<str>size_39</str>
<str>size_40</str>
</arr>
<int name="count_on_hand">321</int>
<arr name="name_text">
<str>Riddle-Shirt Tech</str>
</arr>
<arr name="description_text">
<str>The Riddle Shirt Tech Men's Hoodie features signature details, along with ultra-lightweight fleece for optimum warmth.</str>
</arr>
<arr name="brand_text">
<str>Riddle</str>
</arr>
<arr name="retailer_text">
<str>Supershop</str>
</arr>
</doc>
我不确定options
键值对是否以正确的方式存储,但这是我想到的第一种方法。
免责声明:
我已经对该架构进行了一些假设,因此请检查示例架构和数据的要点-https: //gist.github.com/rchukh/7385672#file-19854599
例如,对于分类群我用特殊的文本字段PathHierarchyTokenizerFactory
为什么Inferno
不匹配的问题Infenro
是因为它不是拼写错误。Photetic过滤器不适用于这种匹配。
如果您对某些细节感兴趣-这是一篇有关lucene / solr支持的算法的不错的文章:http : //ntz-develop.blogspot.com/2011/03/phonetic-algorithms.html
您可能会对SpellCheck Collate功能感兴趣
http://wiki.apache.org/solr/SpellCheckComponent#spellcheck.collate
从Wiki:
排序规则是原始查询字符串,其中替换了每个术语的最佳建议。如果spellcheck.collate为true,Solr将为每个令牌(如果存在)采用最佳建议,并根据该建议构造一个新查询。例如,如果输入查询是“ jawa class lording”,而对“ jawa”的最佳建议是“ java”,“ lording”是“ loading”,则结果归类将是“ java class loading”。
您还可以基于距离算法利用模糊搜索功能(但据我所知,它对于短语搜索(例如,邻近搜索)更有用)。这是来自solr Wiki的示例:
roam~
This search will match terms like foam and roams. It will also match the word "roam" itself.
因此Infenro~
,查询Inferno
中的索引应该匹配...但是我的选择是采用“类似于Google的”方法:
即-通知用户以下结果是正确的拼写,但也允许他使用错误的拼写(发生这种情况时,有时用户可能是正确的,而机器可能是错误的)。
可以使用edismax解决此问题,例如,如果要通过name_text AND选项进行搜索:
q=shirt%20AND%20red&defType=edismax&qf=name_text%20options
在这里,您可以看到此查询的说明计划-http: //explain.solr.pl/explains/w1qb7zie
将选项存储为带分隔符的多值字段的问题是搜索查询将开始与键匹配,例如“颜色”。
例如-以下请求:
q=shirt%20AND%20color&defType=edismax&qf=name_text%20options
将匹配所有具有“颜色”选项的衬衫-http: //explain.solr.pl/explains/pn6fbpfq
我对在词干分析器之后使用任何FilterFactory表示怀疑,但目前无法提供一些有意义的信息。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句