2016-09-07 43 views
1

我設置一個場與被配置爲Solr的patternreplacefilterfactory給出不匹配的值

<fieldType name="text" class="solr.TextField" positionIncrementGap="100"> 
      <analyzer type="index"> 
      <charFilter class="solr.PatternReplaceCharFilterFactory" 
       pattern="#(\w+)" replacement="HTAG.$1 $1"/> 
      <tokenizer class="solr.UAX29URLEmailTokenizerFactory"/> 
      <filter class="solr.CommonGramsFilterFactory" words="stopwords.txt" ignoreCase="true"/> 
      <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true"/> 
      <filter class="solr.LowerCaseFilterFactory"/> 
      </analyzer> 
      <analyzer type="query"> 
       <charFilter class="solr.PatternReplaceCharFilterFactory" 
       pattern="#(\w+)" replacement="HTAG.$1"/> 
      <tokenizer class="solr.UAX29URLEmailTokenizerFactory"/> 
      <filter class="solr.CommonGramsFilterFactory" words="stopwords.txt" ignoreCase="true"/> 
      <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true"/> 
      <filter class="solr.LowerCaseFilterFactory"/> 
      </analyzer> 
     </fieldType> 

我的目標類型是索引兩個詞和#words。因此#usopen將被索引爲usopen#usopen

然後查詢除參數hl之外的參數爲hl.fl=text&hl.fragsize=0&hl.simple.pre=<tag>hl.simple.post=</tag>&hl.requireFieldMatch=true

當我查詢usopen,突出顯示爲文本#usope<tag>n</tag>值和查詢#usopen時,顯示爲<tag>usope</tag>n文本值。

上述配置有什麼問題,並幫助我解決它。

+0

CharFilter無法進行標記。它必須是第一。 CharFilter /分詞器/過濾器。 –

+0

我按照您指定的順序設置字段。問題在於突出顯示。更新了qn。 – Babu

回答

0

CharFilter很可能會改變索引字符串中的偏移量,然後與原始字符不匹配。

嘗試使用TokenFilter代替(PatternReplaceFilterFactory)。

此外,在索引和搜索過程中對#something =>進行規範化處理可能會更有意義,並且不會嘗試保留這兩種表單。只要它匹配,這就是你所關心的。

+0

但我需要索引關鍵字和標籤。還有其他解決方案嗎? – Babu

+0

爲什麼你需要索引hashtag版本?索引表示僅用於使搜索發生。用戶通常不會看到它(例外是刻面)。 –

+0

支持哈希標籤搜索。我試圖索引tweets和精確搜索任何hashtag事件 – Babu