Solr和产品SKU

Solr和产品SKU,solr,Solr,我正在为我的产品SKU编写自定义文本字段类型 如果我有一个SKU,例如ABC-DEF123G/5(只是一个示例),我希望用户能够使用标点或不使用标点进行搜索。在许多情况下,只有部分SKU是相关的,例如在我的示例中为ABC-DEF123 到目前为止,我的schema.xml如下所示: <fieldType name="sku" class="solr.TextField" omitNorms="false"> <analyzer> <token

我正在为我的产品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是用于标识每个库存单位的编号或代码 在商店或其他企业出售的独特产品或物品

它是每个不同产品和服务的唯一标识符 可以购买。SKU的使用植根于数据管理, 使公司能够系统地跟踪其库存或产品 可用性,如仓库和零售店。他们经常 在商户级别分配和序列化。每个SKU都连接到 项目、变体、产品线、捆绑、服务、费用或附件。 SKU通常用于指同一产品的不同版本 产品。例如,一家零售店出售游戏《吉他英雄3》 可能有六个SKU,三个平台各两个,其中一个带有和 一个没有吉他控制器的


您可以将
copyField
与两种不同的字段类型一起使用,例如
sku
sku

如上所述定义
sku
字段,然后使用
模式替换过滤器工厂定义
sku

<fieldType name="sku_stripped" class="solr.TextField" omitNorms="false">
    <analyzer>
        <filter class="solr.PatternReplaceFilterFactory"
             pattern="[^A-Za-z0-9]"
             replacement=""
             replace="all"/>
        <!-- same as above ... -->
    </analyzer>
</fieldType>

然后是copyField:

<fields>
    <!-- ... -->
    <field name="stripped_sku_field" type="sku_stripped" 
        indexed="true" stored="false" multiValued="true" omitNorms="true"/>
    <!-- ... -->
</fields>
<copyField source="*_sku" dest="stripped_sku_field"/>

经过几天的定期玩弄,我终于决定了以下几点:

<fieldType name="sku" class="solr.TextField" omitNorms="false">
    <analyzer>
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="0" generateNumberParts="0" catenateWords="1" catenateNumbers="1" catenateAll="0"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
        <filter class="solr.NGramFilterFactory" minGramSize="3" maxGramSize="15"/>
    </analyzer>
</fieldType>

这是从同事提供的schema.xml的默认版本改编而来的

编辑:

通过更改为边n-gram和缩短n-gram最小长度,相关性得到进一步改善