2016-04-05 175 views
0

我想创建一个非常简单的solr应用程序,我将索引标题和id。我想在没有任何大小写的情况下搜索标题,并且我使用了LowerCaseFilterFactory过滤器,但是有些过程不起作用。我也想阻止搜索支持。不区分大小写Solr 5.5

以下是我的模式文件。

<?xml version="1.0" encoding="UTF-8" ?> 

<schema name="example" version="1.5"> 

    <field name="_version_" type="long" indexed="true" stored="true"/> 
    <field name="_root_" type="string" indexed="true" stored="false"/> 
    <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" /> 

<uniqueKey>id</uniqueKey> 
<field name="title" type="text" indexed="true" stored="true"/> 
<fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/> 
<fieldType name="string" class="solr.StrField" sortMissingLast="true" /> 
<fieldType name="text" class="solr.TextField" positionIncrementGap="100"> 
     <analyzer type="index"> 
       <tokenizer class="solr.KeywordTokenizerFactory" /> 
       <filter class="solr.LowerCaseFilterFactory" /> 
       <filter class="solr.PorterStemFilterFactory"/> 
     </analyzer> 
     <analyzer type="query"> 
       <tokenizer class="solr.WhitespaceTokenizerFactory" /> 
       <filter class="solr.LowerCaseFilterFactory" /> 
     </analyzer> 
</fieldType> 
</schema> 

任何指针将不胜感激。

在此先感谢。

回答

2

您正在使用“KeywordTokenizerFactory”进行索引,“WhitespaceTokenizerFactory”用于查询。

这里两者的输出是不同的。

KeywordTokenizerFactory保持原样。它不会标记字/文本。

WhitespaceTokenizerFactory是在空白处分割文本的标记器。

PorterStemFilterFactory:一个标准化过程,从单词中删除常见的结尾。

Example: "riding", "rides", "horses" ==> "ride", "ride", "hors". 

您可以尝试修改字段类型。

现在,这是留给你的要求,要实现搜索,然后决定建立自定义fieldType或者可以使用在schema.xml

提到fieldType你可以尝试一个字段中键入象下面这样怎么办为您现场标题

<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> 

OR

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

我试过相同,但仍然不区分大小写不工作。我正在使用托管架构而不是schema.xml –

+0

您是否在solr管理界面上验证过相同?在更改之后,您是否重新启动服务器并重新索引数据? –