2015-10-18 57 views
0

我想刪除不需要的詞,並使用詞幹,最後創建帶狀皰疹。然而,在取消停用詞之後,它給了我一個「_」代替停用詞的帶狀皰疹。 我試圖使用PatternReplaceFactory替換_但它不工作。我有如下字段類型:solr詞幹,停止詞和帶狀皰疹沒有給出預期的輸出

<fieldType name="common_shingle" class="solr.TextField"> 
    <analyzer type="index"> 
      <charFilter class="solr.HTMLStripCharFilterFactory"/> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.PorterStemFilterFactory"/> 
     <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/> 
     <filter class="solr.PatternReplaceFilterFactory" pattern=".*_.*" replacement=""/> 
     <filter class="solr.ShingleFilterFactory" outputUnigrams="false" minShingleSize="3" maxShingleSize="3"/>    
    </analyzer> 
</fieldType> 

當我分析了「A棕色狐狸跳過迅速通過懶狗」。它給了我下面的結果:

  1. _棕色狐狸
  2. 棕色狐狸quickli
  3. 狐狸quickli跳
  4. quickli跳_
  5. 跳_
  6. _落子
  7. _落子狗

我該如何移除_來自小屋標記。另外,是否有一種方法只能從停用詞創建帶狀皰疹?

+0

請參閱http://stackoverflow.com/questions/28459949/solr-stop-words-replaced-with-symbol以及 – Marco

回答

0

_由ShingleFilter插入,因爲它用標記_替換空位增量。

如果你想刪除這個值,你必須在之後的ShingleFilter執行PatternReplace ,因爲它在這之前並不存在於令牌流中。

ElasticSearch公開一個選項來選擇替換字符作爲「fillter_token」,但Solr的實現似乎直接使用Lucene實現,所以你應該可以使用fillerToken來自己設置它。嘗試在ShingleFilter定義中執行fillerToken="",而不是使用patternreplacefilter。因爲停用詞 設置PositionIncrements爲False,luceneMatchVersion的

+0

它正在工作。但是,我想要在停用詞被刪除之後確切的3個詞語帶狀皰疹。如下圖:「 棕色狐狸快速跳, 狐狸快速跳。 快速跳躍拉子,跳躍拉子狗」。我不想要這個空間或_瓦片 –

+0

@SanjayLama確定 - 那麼你應該問這個問題:-)如果你在文本中保留了一個神奇的填充符(比如'_'),你可以將PatternReplace移動到在ShingleFilter之後並用「」(這是你的過濾器所做的)替換所有包含'_'的標記,實際上將它們從字段的值中移除。 – MatsLindh

+0

它的工作就像你說的。但是,它正在跳過包含停用詞的作品。目前,它給我只有2個帶狀皰疹:'棕色狐狸快速'和'狐狸快速跳'。休息被刪除。我希望在停用詞被刪除後形成帶狀皰疹。如下:「棕色狐狸快,狐狸快速跳躍,快速跳躍拉子,跳躍拉子狗」。如果你能指導我完成這件事,那對我真的很有幫助。謝謝。 –

1

那4.3

這個替換您StopFilterFactory。

<filter class="solr.StopFilterFactory" luceneMatchVersion="4.3" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="false"/> 
+0

作爲過濾器參數的'luceneMatchVersion'不再存在於solr 6中。您必須在solconfig.xml中設置' 4.3'。 – Marco

0

在SOLR的吉拉有一個與可用補丁的改進要求:https://issues.apache.org/jira/browse/SOLR-11604

編譯新的Lucene分析器-common.jar與此補丁,並使用skipFillerTokens =「真」的選項schema.xml

<filter class="solr.ShingleFilterFactory" ... skipFillerTokens="true"/> 

如果您希望將此修補程序包含在下一個SOLR版本中,請爲此Jira問題投票。