2010-08-03 85 views
3

我想排序solr查詢字段忽略停用詞,但似乎無法找到一種方法來做到這一點。例如,我希望結果等來分類:如何排序solr沒有停用詞

  • 查理
  • 狐狸
  • 直升機

這可能嗎?眼下字段類型定義,如:

<fieldType name="alphaOnlySort" class="solr.TextField" sortMissingLast="true" omitNorms="true"> 
    <analyzer> 
    <tokenizer class="solr.KeywordTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory" /> 
    <filter class="solr.TrimFilterFactory" /> 
    <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/> 
    <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/> 
    <filter class="solr.PatternReplaceFilterFactory" pattern="([^a-z])" replacement="" replace="all" /> 
    </analyzer> 
</fieldType> 

而且字段添加這樣的:

<field name="title" type="alphaOnlySort" indexed="true" stored="false"/> 

好像別人能有我們這樣做呢?或者是排序沒有停用詞一個禁忌?

+0

請修復xml格式。 – 2010-08-03 01:24:22

回答

1

您需要將停用詞過濾器實際添加到解析器鏈中。將要索引的文本粘貼到Solr Admin的字段分析器中,您將看到A狐狸中的A沒有被丟棄!

+0

我在那裏有停用詞過濾器,但它沒有出現在SO問題中。我修復了它。我也沒有意識到有一個現場分析儀。我可以使用它來快速調試,但我仍然遇到問題......我能想到的唯一的事情是stopwords.txt文件需要在其他地方? – Jamie 2010-08-03 15:49:18

+0

stopwords.txt應該位於/ conf/dir中 – 2010-08-04 01:48:49

1

使用Eric提到的分析器,我確定停用詞過濾器只捕獲匹配的確切單詞,而不是句子的片斷。所以,如果有一個「THE」的標記,它會將其刪除。但是,如果有一個「魚」的標誌,它不會觸及它。

那麼,有沒有辦法使這項工作?我只想在字段上排序,忽略任何停用詞。但結果是一堆句子(或書名)。

1

KeywordTokenizerFactory不會將內容分解爲單獨的片段,所以StopFilterFactory試圖將令牌(整個內容)與停用詞列表進行匹配並且找不到匹配。要從索引中獲得停用詞,您需要使用像WhitespaceTokenizerFactory這樣的標記器,但是您無法在標記字段上排序。所以,我能想到的唯一辦法做到這一點是:

  1. 仍然使用KeywordTokenizerFactory,
  2. 擺脫StopFilterFactory的
  3. 並移除內容使用使用PatternReplaceFilterFactory正則表達式停止詞(其目前正在使用去除數字)。

通常,您想要排序(不搜索)的唯一停用詞是「A」,「AN」,「THE」。我對reg表達式不太擅長,但我相信這對很多人來說都是微不足道的。