2013-03-16 70 views
1

我scheme.xlm看起來是這樣的:如何將查詢SOLR數據的查詢變爲小寫?

<fieldType name="text" class="solr.TextField" positionIncrementGap="100"> 
     <analyzer type="index"> 
      <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
      <filter class="solr.LowerCaseFilterFactory"/> 
     </analyzer>  
     <analyzer type="query"> 
      <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
      <filter class="solr.LowerCaseFilterFactory"/> 
     </analyzer>  
</fieldType> 

<!-- The searched field --> 
<field name="product_name" type="text" indexed="true" stored="true"/> 

這應該指數小寫領域,也變換搜索查詢到小寫。

數據我想找到的是:「諾基亞Lumia 610」

當我搜索「諾基亞」我得到預期的結果,但 只搜索「諾基亞」(大寫N)時不會有任何結果。

上面的「分析器」只對索引執行小寫,而對搜索查詢執行小寫。

這是錯誤? 如何強制SOLR索引和搜索查詢爲小寫?

+0

請使用'debugQuery = true'再次激發您的查詢,並將解析後的查詢粘貼到此處。 – nikhil500 2013-03-17 02:19:11

回答

3

搜索查詢的變換還取決於查詢的類型和您正在使用的分析器。例如,如果您將請求發送到選擇分析器,上述操作不會將您的搜索查詢轉換爲小寫。如果您發送的請求: -

http://url/solr/select?q=Nokia 

那麼上面不會被轉換爲小寫,因爲選擇分析儀沒有出現在你的字段類型定義。你將不得不修改您的代碼如下: -

<fieldType name="text" class="solr.TextField" positionIncrementGap="100"> 
      <analyzer type="index"> 
       <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
       <filter class="solr.LowerCaseFilterFactory"/> 
      </analyzer>  
      <analyzer type="query"> 
       <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
       <filter class="solr.LowerCaseFilterFactory"/> 
      </analyzer> 
      <analyzer type="select"> 
       <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
       <filter class="solr.LowerCaseFilterFactory"/> 
      </analyzer> 
    </fieldType> 

如果上述方法無效,那麼請發表您發送請求並添加debugQuery = true來請求的輸出。

+0

這是問題,謝謝! – tasmaniski 2013-03-17 17:47:08

0

隨着

<fieldType name="text" class="solr.TextField" positionIncrementGap="100"> 
      <analyzer type="index"> 
       <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
       <filter class="solr.LowerCaseFilterFactory"/> 
      </analyzer>  
      <analyzer type="query"> 
       <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
       <filter class="solr.LowerCaseFilterFactory"/> 
      </analyzer> 
      <analyzer type="select"> 
       <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
       <filter class="solr.LowerCaseFilterFactory"/> 
      </analyzer> 
    </fieldType> 

schema.xml中。

在head.vm中更改返回$(「#q」)。val();return $(「#q」)。val()。toLowerCase();針對InCaseSensitive自動填充功能的。 這樣你可以得到結果,如果你用大寫字母搜索。