2015-04-23 90 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>