2012-11-26 50 views
1

我想連字符/破折號引起的Solr只提取格式類似於正NNNNNNN挑戰與Solr的Lucene的

本來我希望能保持滿票一起一票的第二七位數部分。根據文件數字與數字應保持在一起,但在錘掉了這個問題一段時間,看看代碼我不認爲是這樣的。 Solr總是生成兩個詞。因此,而不是n的第一個數字的大量匹配,我想我可以從第二部分獲得更好的查詢結果。代的一種破折號:

<charFilter class="solr.PatternReplaceCharFilterFactory" 
     pattern="\b\d[A](\d\d\d\d\d\d\d)\b" replacement="$1" replace="all" 
     maxBlockChars="20000"/> 

將解析1A1234567精細 但 - \ B」替換= 「$ 1」 替換= 「所有」 maxBlockChars = 「20000」/>

不會解析1-1234567

所以它看起來像只是一個連字符的問題我試過 - (逃脫)和[ - ]和\ u002D和\ X {} 45和\ x045沒有成功

我。我曾嘗試在我身邊放置炭過濾器T:

<charFilter class="solr.MappingCharFilterFactory" mapping="mapping.txt"/> 
    <charFilter class="solr.PatternReplaceCharFilterFactory" 
     pattern="\b\d[-](\d\d\d\d\d\d\d)\b" replacement="$1" replace="all" maxBlockChars="20000"/> 
    <charFilter class="solr.MappingCharFilterFactory" mapping="mapping2.txt"/> 

與映射:

「 - 」=> 「Z」

然後

「Z」=> 「 - 」

我看起來像連字符在Flex標記化中被吃掉,甚至不可用於char過濾器。

有沒有人在Solr/Lucene中使用連字符/短劃線獲得更多成功?由於

+0

通常,過濾器應用於分析器和標記器之後,所以是的,那些連字符已經消失了。我的問題是:這個領域是否需要進行分析和標記化?如果它只是一個票號,那麼我會說使用[KeywordAnalyzer](http://lucene.apache.org/core/3_6_0/api/all/org/apache/lucene/analysis/KeywordAnalyzer.html),或者也許可以將該字段設置爲[StrField](http://lucene.apache.org/solr/api-4_0_0-BETA/org/apache/solr/schema/StrField.html),或者其他內容。 – femtoRgon

+0

聽起來好像在構建solr文檔的應用程序中做起來可能更容易。 –

回答

3

如果您的Solr使用Lucene的近期(3.x的+我認爲),你會想使用ClassicAnalyzer而非StandardAnalyzer,因爲現在StandardAnalyzer始終把連字符作爲分隔符。

+0

感謝您的幫助。我們還將嘗試使用未分析的基本字符串類型。 – user1840253

+0

理解這很好。但是,我們有許多索引字段,對於其中大多數我們需要使用StandardAnalyzer。然後,我們將它們組合到我們的查詢門戶的一個默認字段中。因此,用戶輸入的查詢仍然會拆分第一部分,並給出不必要的結果。我仍然不明白爲什麼charFilter不起作用,因爲它們在分詞器之前。添加它們仍然是必要的。 – user1840253