2016-01-12 109 views
0

我有一個文本字段,其中包含電視劇或電影的標題。在幾種情況下,我想對我所說的非常普通的文本字段進行短語查詢。這對於大多數詞組來說工作得很好,但在一些可重複的情況下,它不會,但只是不返回任何內容。它似乎與某些「特殊」角色有關,但並不是我假設的所有特殊角色都會受到影響。某些字符在文本字段中打破詞組搜索

  • Title:("Mission: Impossible")工作
  • Title:("Disney A.N.T.")不起作用
  • Title:("Stephen King's Shining")不起作用
  • Title:("Irgendwie L. A.")工作

嘗試其他幾個冠軍我會假設後,這是某種相關到點.和apostroph '和其他我還不知道。我不知道,在哪裏看知道

相關的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> 
+2

在solr管理的分析頁面上輸出開始通常是個好主意,以查看查詢和索引時查詢如何更改,查看每個令牌以及它們是否匹配。 – MatsLindh

回答

1

你的問題是關於在哪裏型「指數」的分析儀包含solr.WordDelimiterFilterFactory場短語,但在類型「查詢「 它不是。

MatsLindh告訴我們,第一步是打開analysis screen

在這種情況下,位置值很重要。

隨着solr.WordDelimiterFilterFactory中的屬性,標記「King's」被轉換爲「king's」「king」「kings」「s」,最後一個「s」開啓!位置。

這並不能說明 solr.StandardTokenizerFactory 所以,如果你搜索「斯蒂芬·金的光輝」無solr.WordDelimiterFilterFactory「閃靈」令牌是三個位置,但如果你與solr.WordDelimiterFilterFactory令牌索引的語句「閃亮」在第四位,所以只有「斯蒂芬金的閃靈」〜2(與Slop)會相配,而不是「斯蒂芬金的閃靈」。

這並不能解釋您的問題與「迪士尼A.N.T.」。但請注意,solr.StandardTokenizerFactory將刪除最後一個點,而solr.WhitespaceTokenizerFactory則不會。