首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Solr和产品SKU

Solr和产品SKU
EN

Stack Overflow用户
提问于 2012-05-06 22:41:12
回答 2查看 2K关注 0票数 3

我正在为我的产品SKU编写一个自定义文本字段类型。

如果我有一个SKU,比如ABC-DEF123G/5 (只是一个例子),我希望用户能够使用或不使用标点符号进行搜索。在许多情况下,SKU只有一部分是相关的,例如我的示例中的ABC-DEF123

到目前为止,我的schema.xml看起来像:

代码语言:javascript
复制
<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”游戏的零售店可能有6个SKU,三个平台各有两个,其中一个带有吉他控制器,另一个没有吉他控制器。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-16 02:10:12

经过几天的周期性处理之后,我终于确定了以下几点:

代码语言:javascript
复制
<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克和缩短n克最小长度,进一步提高了关联度。

<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15"/>

票数 4
EN

Stack Overflow用户

发布于 2012-05-07 09:51:45

您可以使用具有两种不同字段类型的copyField,例如skusku_stripped

按照上面的方式定义您的sku字段,然后使用PatternReplaceFilterFactory定义sku_stripped

代码语言:javascript
复制
<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:

代码语言:javascript
复制
<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"/>
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10474890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档