Solr 电子邮件地址搜索 returns 0 个结果

Solr email address search returns 0 results

我正在尝试允许在 Solr 4.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>

如下使用 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>