【问题标题】:Solr stopwords issue - documents are not matchingSolr 停用词问题 - 文档不匹配
【发布时间】:2012-01-13 11:27:20
【问题描述】:

我正在使用 solr-3.4,我的部分架构看起来像,

<fieldType name="text" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
    <analyzer type="index">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords_en.txt" enablePositionIncrements="true"/>
        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
        <filter class="solr.PorterStemFilterFactory"/>
    </analyzer>
    <analyzer type="query">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords_en.txt" enablePositionIncrements="true"/>
        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
        <filter class="solr.PorterStemFilterFactory"/>
    </analyzer>
</fieldType>

stopwords_en.txt 包含
一个
一个


作为

等等。

现在,当我搜索“买房”时,Solr 不会返回带有文本“买房”的文档。
此外,当我搜索“买房”时,Solr 不会返回带有文本“买房”的文档。

debugQuery 的一部分是

<str name="rawquerystring">cContent:"buy a house"</str>
<str name="querystring">cContent:"buy a house"</str>
<str name="parsedquery">PhraseQuery(cContent:"bui ? hous")</str>
<str name="parsedquery_toString">cContent:"bui ? hous"</str>

发现了类似(但不准确)的问题here
但是没有令人满意的答案来解决这个问题。

知道如何解决这个问题吗?或者有什么问题?

【问题讨论】:

标签: solr


【解决方案1】:

您正在使用 PhraseQuery 进行搜索,因此在第一种情况下“买房”不会匹配“买房”。如果您将 slop (cContent:"buy house"~2) 添加到 PhraseQuery 中,您还将获得匹配项。

在第二种情况下,虽然停用词被过滤掉了,但它仍然希望在那个位置上有一些东西,所以“买房子”将匹配“买一个房子”,而不是“买房子”。也许 slop 也可以解决这个问题,但我不确定。

【讨论】:

  • 感谢 O.Klein,这在一定程度上也会有所帮助,但我仍然必须考虑第二种情况,并消除像“购买白宫”之类的情况,这些情况在我使用 slop 时会被抓住。
【解决方案2】:

实际上,我认为您的问题出在 PorterStemmer 上——“house”正在转换为“hous”。除非你真的认为你需要它,否则我会关闭搬运工词干分析器。根据我的经验,它通常弊大于利。

【讨论】:

    猜你喜欢
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-25
    相关资源
    最近更新 更多