2015-04-23 91 views
0

我试图允许在Solr 4.0中进行部分或全部电子邮件搜索。Solr电子邮件地址搜索返回0结果

这里是我的测试案例:

我试过this。但是我没有得到第一个提供整个电子邮件并且没有得到第二个结果(这恰好是唯一值)的结果的确切结果,这意味着Solr没有查看电子邮件字段。

这里是截断的模式。我必须错过一些明显的东西,但我没有看到它。

<schema name="Search" version="1.5"> 
<types> 
    <fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/> 

    <fieldType name="text_email" class="solr.TextField" sortMissingLast="true" omitNorms="true" autoGeneratePhraseQueries="true"> 
     <analyzer type="index"> 
     <tokenizer class="solr.StandardTokenizerFactory" /> 
     <filter class="solr.LowerCaseFilterFactory" /> 
     <filter class="solr.WordDelimiterFilterFactory" /> 
     </analyzer> 
     <analyzer type="query"> 
     <tokenizer class="solr.StandardTokenizerFactory" /> 
     <filter class="solr.LowerCaseFilterFactory" /> 
     <filter class="solr.WordDelimiterFilterFactory" /> 
     </analyzer> 
    </fieldType> 
</types> 

<fields> 
    . 
    . 
    . 
    <field name="email" type="text_email" indexed="true" stored="true"/> 
    . 
    . 
    . 
</fields> 

回答

1

使用wordDelimiterFilterFactory如下。

<filter class="solr.WordDelimiterFilterFactory" 
       generateWordParts="1" 
       generateNumberParts="0" 
       catenateWords="0" 
       catenateNumbers="0" 
       catenateAll="0" 
       preserveOriginal="1" 
       /> 

generateWordParts="1"将有助于产生词类:

preserveOriginal="1"导致原始凭证不修改索引。

最终的类型应该是这样的:

<analyzer type="index"> 
     <tokenizer class="solr.StandardTokenizerFactory" /> 
     <filter class="solr.WordDelimiterFilterFactory" 
       generateWordParts="1" 
       generateNumberParts="0" 
       catenateWords="0" 
       catenateNumbers="0" 
       catenateAll="0" 
       preserveOriginal="1" 
       /> 
     <filter class="solr.LowerCaseFilterFactory" /> 
     </analyzer> 
     <analyzer type="query"> 
     <tokenizer class="solr.StandardTokenizerFactory" /> 
     <filter class="solr.WordDelimiterFilterFactory" 
       generateWordParts="1" 
       generateNumberParts="0" 
       catenateWords="0" 
       catenateNumbers="0" 
       catenateAll="0" 
       preserveOriginal="1" 
       /> 
     <filter class="solr.LowerCaseFilterFactory" /> 
     </analyzer>