我正在为我的产品 SKU 编写自定义文本字段类型。
如果我有一个 SKU,例如ABC-DEF123G/5
(只是一个例子),我希望用户能够使用或不使用标点符号进行搜索。在许多情况下,只有 SKU 的一部分是相关的,例如ABC-DEF123
在我的示例中。
到目前为止,我schema.xml
看起来像:
<fieldType name="sku" class="solr.TextField" omitNorms="false">
<analyzer>
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.WordDelimiterFilterFactory"
splitOnCaseChange="0"
splitOnNumerics="0"
stemEnglishPossessive="0"
catenateAll="1"
/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="15"/>
</analyzer>
</fieldType>
<!-- For use in Sunspot: -->
<dynamicField name="*_sku" stored="false" type="sku" multiValued="true" indexed="true"/>
这很有效,因为我可以搜索 SKU 的某些部分,例如DEF123
并获得适当的结果(感谢 ngram 过滤器)。但是,没有标点分隔符的搜索不会返回任何匹配项:ABC-DEF123G/5
很好但ABCDEF123G5
不是。
当我对我的架构进行分析时,我看到搜索ABCDEF123G5
突出显示了匹配项,但是在运行实际查询时没有返回任何结果。
我重新启动了 Solr 并重新索引了我的文档。很多次。
关于索引 SKU 或类似的任何智慧珍珠?
这位编辑(aitchnyu)从维基百科添加了这个:
库存单位或 SKU 是一个数字或代码,用于识别在商店或其他企业中销售的每个独特产品或项目。
它是可以购买的每种不同产品和服务的唯一标识符。SKU 的使用植根于数据管理,使公司能够系统地跟踪其库存或产品可用性,例如在仓库和零售店。它们通常在商家级别分配和序列化。每个 SKU 都附加到一个项目、变体、产品线、捆绑包、服务、费用或附件。SKU 通常用于指代同一产品的不同版本。例如,一家销售吉他英雄 3 游戏的零售店可能有六个 SKU,三个平台各有两个——一个有吉他控制器,一个没有吉他控制器。