某些字符会破坏文本字段中的短语搜索

时间:2016-01-12 14:30:36

标签: solr

我有一个文本字段,其中包含电视剧或电影的标题。在某些情况下,我想对我所说的非常正常的文本字段执行短语查询。这适用于大多数短语术语,但在某些可重现的情况下,它不会,但只是不返回任何内容。它似乎与一些特殊的"字符,但不是我认为的所有特殊字符都会受到影响。

  • Title:("Mission: Impossible")正常工作
  • Title:("Disney A.N.T.")无法正常工作
  • Title:("Stephen King's Shining")无法正常工作
  • Title:("Irgendwie L. A.")正常工作

在尝试了其他几个标题之后我会假设它与点.和叛逆者'有某种关联,也许其他我还不知道。我不知道,在哪里知道

相关的schema.xml

<fieldType name="title" class="solr.TextField" sortMissingLast="true" 
           positionIncrementGap="100" autoGeneratePhraseQueries="false">
    <analyzer type="index">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.GermanNormalizationFilterFactory"/>
        <filter class="solr.ICUFoldingFilterFactory"/>
        <filter class="solr.WordDelimiterFilterFactory" preserveOriginal="1" 
            splitOnCaseChange="0" splitOnNumerics="0" stemEnglishPossessive="0" 
            generateWordParts="1" generateNumberParts="0" 
            catenateWords="1" catenateNumbers="0" catenateAll="0" />
        <filter class="solr.TrimFilterFactory" />
        <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
    <analyzer type="query">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.GermanNormalizationFilterFactory"/>
        <filter class="solr.ICUFoldingFilterFactory"/>
        <filter class="solr.TrimFilterFactory" />
        <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
</fieldType>

1 个答案:

答案 0 :(得分:1)

您的问题是关于字段上的短语,其中“index”类型的分析器包含solr.WordDelimiterFilterFactory,但在类型“query”中它不包含。

MatsLindh告诉我们,第一步是打开analysis screen

在这种情况下,位置值很重要。

使用solr.WordDelimiterFilterFactory中的属性,标记“King's”将转换为“king”,“king”“kings”“s”,最后一个“s”开启!second!位置。

这不解释 solr.StandardTokenizerFactory 因此,如果您在没有solr.WordDelimiterFilterFactory的情况下搜索短语“Stephen King's Shining”,则“Shining”标记位于第三位,但如果您使用solr.WordDelimiterFilterFactory进行索引,则标记“Shining”位于第四位,因此只有“Stephen King's闪耀的“~2(与Slop”相匹配,但不是“斯蒂芬金的闪耀”。

这并不能解释您对“迪士尼A.N.T.”的问题。但请注意,solr.StandardTokenizerFactory将删除最后一个点,而solr.WhitespaceTokenizerFactory则不会。