Solr:搜索带连字符的术语给出 0 个结果

Posted

技术标签:

【中文标题】Solr:搜索带连字符的术语给出 0 个结果【英文标题】:Solr: Search for hyphenated terms give 0 results 【发布时间】:2013-06-29 20:09:09 【问题描述】:

我无法在我的 SOLR 搜索结果中检索带连字符的术语。例如,当我尝试搜索:superman、super man 等时,我应该在搜索结果中看到 super-man、super-man3 等标题。

FieldType如下:

<fieldType name="autocomplete_edge" class="solr.TextField">
    <analyzer type="index">
        <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt" />
        <tokenizer class="solr.KeywordTokenizerFactory" />
        <filter class="solr.LowerCaseFilterFactory" />
        <filter class="solr.PatternReplaceFilterFactory" pattern="([\.,;:-_])" replacement=" " replace="all" />
        <filter class="solr.EdgeNGramFilterFactory" maxGramSize="30" minGramSize="1" />
        <filter class="solr.PatternReplaceFilterFactory" pattern="([^\w\d\*æøåÆØÅ ])" replacement="" replace="all" />
    </analyzer>
    <analyzer type="query">
        <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt" />
        <tokenizer class="solr.KeywordTokenizerFactory" />
        <filter class="solr.LowerCaseFilterFactory" />
        <filter class="solr.PatternReplaceFilterFactory" pattern="([\.,;:-_])" replacement=" " replace="all" />
        <filter class="solr.PatternReplaceFilterFactory" pattern="([^\w\d\*æøåÆØÅ ])" replacement="" replace="all" />
        <filter class="solr.PatternReplaceFilterFactory" pattern="^(.30)(.*)?" replacement="$1" replace="all" />
    </analyzer>
</fieldType> 

请帮忙。

问候

【问题讨论】:

能否请您以更易读的格式发布字段类型? 您好,原始问题已被编辑为内容更易读。像 super、super-、super-man、superman 这样的搜索词返回所需的标题。它失败的情况是:给出0结果的超人 【参考方案1】:

我建议将WordDelimiterFilterFactory 用于您的用例。

WordDelimiterFilterFactory 将允许您生成可以根据特殊字符和数字拆分的标记,并且还可以保留原始标记,以便与搜索词匹配。

例如generateWordParts 将转换 super-man -> super, mansplitOnNumerics 将生成 super-man3 -> super, man, 3catenateWords 将转换 super-man -> supermancatenateAll 将转换 super-man3 -> superman3

因此,这将为您提供匹配相同单词组合的能力

【讨论】:

【参考方案2】:

假设您正在标记您的连字符确定(请参阅下面答案中提到的 WordDelimiterFilterFactory),那么您的 solr 配置文件中的默认字段 (df) 或作为参数传递 (&df=xxxx) 与您的字段相同标记化?

假设您的默认字段是:文本 并且您的索引字段是:名称

如果我们查询超人

name:super man

实际查询是:

parsedquery_toString: "+name:super +text:man"

不匹配。如果你用引号查询超人:

name:"super man"

它应该可以正常工作,但不太灵活:

parsedquery_toString: "name:\"super man\"",

如果您将 df 设置为 name(例如匹配索引字段),它会给出:

parsedquery_toString: "+name:super +name:man"

也可以直接查询

name:super name:man

请注意,如果您使用的是 dismax,如果仍然不匹配,则可能需要查看 mm 字段。

【讨论】:

以上是关于Solr:搜索带连字符的术语给出 0 个结果的主要内容,如果未能解决你的问题,请参考以下文章

Magento产品可视性搜索在企业版1.14中无效

如何使用 Jquery 从 SOLR 获取搜索结果

Solr8.0.0搜索查询问题

在Alfresco的Lucene查询搜索给出了奇怪的结果

Solr - 在不返回搜索结果的情况下获取构面计数

solr 名称 关键字两个字段权重设置