我们有一个在线商店,我们使用 Solr 搜索产品。基本设置工作正常,但目前缺少一些功能。我查找了一些像亚马逊这样的在线商店,我喜欢他们提供的功能。所以我想,我如何配置 Solr 来为我们的最终用户提供一些功能。
我们的产品数据包含产品的标准数据,例如
- 产品名称
- 描述
- 一个产品属于多个类别和子类别
- 一个产品可以有多种变体可供选择,例如红色、蓝色、绿色、S、M、L、XL...的 T 恤或 16GB、32GB 的 iPad...
- 产品有品牌
- 产品有零售商
目前,我们正在使用这个模式文件来索引 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
or 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
键值对是否以正确的方式存储,但这是我想出的第一种方法。