2012-06-22 125 views
3

我有〜50 M推文的存檔。我想看看其他用戶是否互相提及。雖然有問題:有一個名爲Facebook(www.twitter.com/facebook)的帳戶。我想搜索提及此帳戶的那些推文,而不是簡單地說Facebook。solr太陽黑子精確搜索詞

因此,使用太陽黑子我的語法是:

search = FeedEntry.search do   
    without(:person_id,person.id) # No self referencing 
    fulltext "@#{person.username}" #Find those Feeds that mention this person 
    paginate :page => 1, :per_page => 1000000 #Make sure we dont paginate 
end 

Solr的似乎忽略@符號完全,甚至當搜索把用戶名中的「」或「」這並不重要。

search = FeedEntry.search{fulltext "facebook -RT"} 
=> <Sunspot::Search:{:start=>0, :defType=>"dismax", :fq=>["type:FeedEntry"], :rows=>30, :q=>"facebook -RT", :fl=>"* score", :qf=>"retweeters_text text_text"}> 
>> search.total 
=> 299525 

我該怎麼辦?我必須通過這些結果,並使用紅寶石「包括」@facebook「來清理費時的誤報。

我懷疑它與我正在使用的分詞器工廠有關: http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.KeywordTokenizerFactory

我在schema.xml中的配置是:

<fieldType name="text" class="solr.TextField" omitNorms="false"> 
     <analyzer> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.StandardFilterFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     </analyzer> 
    </fieldType> 

我想改變StandardTokenizerFactory到WhitespaceTokenizerFactory在我的情況下,將有助於順便說一句,有沒有辦法,看看哪些令牌這些工廠在我的陰莖產生。 ?

我的最後一個問題是,在更改標記器後是否需要重新編制索引?我的假設是肯定的。

乾杯 托馬斯

回答

0

如果可以解析哈希標籤,重新鳴叫,@name等你指數這些微博和Solr中使用不同的領域,那麼你將有更強大的搜索(恕我直言)

更改爲空格標記器應該有助於您記下,並且您將需要reindex。您也需要在搜索過程中使用相同的標記器,分析器。

+0

你是對的我可能會爲他們創建適當的數據庫字段並將它們存儲爲推文的附加數據看起來Twitter也在做什麼,因爲他們可以報告「實體「也由推文提到。非常感謝! – plotti

0

StandardTokenizerFactory會拋出標點符號,但不包括空白後的句點除外。特別是,它會拋出「@」,所以你的@name搜索將註定要失敗(因爲搜索完整的電子郵件地址.保留電子郵件地址,但我相信它仍然會拋出@的@作爲@「。」

WhitespaceTokenizerFactory將保留@name,但如果後面跟着逗號(@name@name,不同),它將以不同的方式對待它,因此它可能仍然不適合您。您可能最終希望使用PatternTokenizerFactory你在哪裏指定你想如何通過正則表達式來解析