微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Solr 4.8.1 中获得“以”结尾的搜索?

如何解决如何在 Solr 4.8.1 中获得“以”结尾的搜索?

我有一个在 Solr 上索引的文档,其中包含此字段:

{
    "manufacturerSkuEndsWith": [
        "DU351118DR0"
    ]
}

我的目标是在 manufacturerSkuEndsWith 字段上进行“以”结尾的搜索。例如,以下查询应与上述值匹配:DR08DR018DR0118DR0...但这些查询不应匹配:DU35,118DR,118...

我的问题是查询 118 匹配该文档,即使 DU351118DR0 不以 118 结尾。

我的 Solr & Lucene 版本是 4.8.1。我发现在此版本中不再支持 EdgeNGramTokenizer 的 side="back"LUCENE-3907。在此线程中,他们建议使用 ReverseStringFilter 来获得类似于带有 side="back" 的 EdgeNGramTokenizer 的行为,因此这就是我在 manufacturerSkuEndsWith 中配置 schema.xml 字段的方式:

<field indexed="true" multiValued="true" name="manufacturerSkuEndsWith" stored="true" type="smccTextReversednGram"/>

<copyField dest="manufacturerSkuEndsWith" source="ManufacturerSku"/>

<fieldType class="solr.TextField" name="smccTextReversednGram" positionIncrementGap="100">
    <analyzer type="index">
        <tokenizer class="solr.NGramTokenizerFactory" maxGramSize="10" minGramSize="3"/>
        <filter class="solr.SynonymFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.ReverseStringFilterFactory"/>
    </analyzer>
    <analyzer type="query">
        <tokenizer class="solr.KeywordTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.ReverseStringFilterFactory"/>
    </analyzer>
</fieldType>

但此配置不执行“以”结尾的搜索

screenshot from the Solr analysis tool

我怎样才能获得这种类型的搜索

解决方法

您使用的是 NGramTokenizer 而不是 EdgeNGramFilter,如示例中所示。 NgramTokenizer 也会从字符串内部生成标记,而不仅仅是从边缘生成标记。

要获得您正在寻找的行为,您必须有一个 KeywordTokenizer(它将输入作为单个标记保留),然后使用 ReverseStringFilter 将其反转 - 在使用 EdgeNGramFilter 从开头生成字符串之前现在反转的字符串:

foo -> oof -> o,oo,oof

然后您可以再次通过反向字符串过滤器运行它们以获得索引的“正确”版本:

-> o,foo

.. 或者你可以像你在你的领域所做的那样,并反转输入字符串:

foo -> oof -> matches the oof token

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。