2012-02-21 52 views
2

我正在使用solr進行搜索。當我搜索一個字包含大寫字母使用solr從段落中搜索具有大寫字母的單詞

描述,它沒有顯示任何結果。但它給出的結果爲小寫字母..

例如:如果我的查詢是q = description:* stack *,我會得到結果。但是,如果查詢是

Q =說明:*棧*,它不會給任何結果evenif說明包含字

我的架構包含:

<fieldType name="string" class="solr.TextField"> 
<analyzer type="index"> 
    <tokenizer class="solr.KeywordTokenizerFactory"/> 
    <filter class="solr.ASCIIFoldingFilterFactory"/> 
    <filter class="solr.LowerCaseFilterFactory" /> 
    <filter class="solr.ReversedWildcardFilterFactory" /> 
</analyzer> 
<analyzer type="query"> 
    <tokenizer class="solr.KeywordTokenizerFactory"/> 
    <filter class="solr.ASCIIFoldingFilterFactory"/> 
    <filter class="solr.LowerCaseFilterFactory" /> 
    <filter class="solr.ReversedWildcardFilterFactory" /> 
    </analyzer> 
</fieldType> 

我想用大寫字母也搜索..

有人可以幫我嗎?

+0

請問你能否更清楚一點你的問題? – 2012-02-21 06:22:27

回答

1

看看Solr wiki。它說:

將此過濾器添加到索引分析器,但不是查詢分析器。

嘗試debugQuery=on查詢你已經修改了方案,以反映維基指令後:

<str name="querystring">text:*Stack*</str> 
<str name="parsedquery">text:#1;*kcatS*</str> 

正如你所看到的,ReversedWildcardFilterFactory改變你的查詢,即使它不是在你的查詢分析器鏈,與這樣的字段類型:

<fieldType name="text" class="solr.TextField"> 
    <analyzer type="index"> 
     <tokenizer class="solr.KeywordTokenizerFactory"/> 
     <filter class="solr.ASCIIFoldingFilterFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/>   
     <filter class="solr.ReversedWildcardFilterFactory" />  
    </analyzer> 
    <analyzer type="query"> 
     <tokenizer class="solr.KeywordTokenizerFactory"/>  
     <filter class="solr.ASCIIFoldingFilterFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/>    
    </analyzer> 
</fieldType> 

此外,LowerCaseFilterFactory不解僱你的查詢(在S沒有在日小寫解析後的查詢)。 ASCIIFoldingFilterFactory也是如此。 看看here瞭解更多:

Solr不分析查詢中有通配符。是的,這個 意味着在建立索引期間, 中的篩選器LowerCaseFilterFactory會將堆棧轉換爲堆棧,但是在進行查詢時這種情況不會發生,儘管 事實上篩選器已正確定義。這就是爲什麼你不要 得到任何搜索結果。

附帶在我心目中是使小寫在客戶端的查詢,將它們發送到Solr之前,最簡單的解決方案。您還應該考慮ASCIIFoldingFilterFactory也未被解僱。你真的需要它嗎?

+0

非常感謝你......你給我一個清晰的想法.. – Micku 2012-02-21 11:05:23

+0

這有效嗎?根據SOLR缺陷跟蹤(https://issues.apache.org/jira/browse/SOLR-2438),此問題已在v3.6和4.0中修復。 – 2012-02-21 15:45:58

+0

@MikePurcell我的例子顯示了'ReversedWildcardFilterFactory'如何工作:過濾器不會被解僱爲通配符查詢。我只是解釋了爲什麼它不起作用並提出了一個潛在的解決方案。我不確定有多少SOLR-2438與'ReversedWildcardFilterFactory'相關。 – javanna 2012-02-21 16:16:17