2013-03-16 72 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自动填充功能的。 这样你可以得到结果,如果你用大写字母搜索。