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



我正在尝试允许在Solr 4.0中进行部分或全部电子邮件搜索。

这是我的测试用例:

  • flast@company.com
  • 吹捧

我试过这个。但是对于提供整个电子邮件的第一种情况,我没有得到确切的结果,也没有得到第二种结果(恰好是唯一值)的任何结果,这意味着 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>

最新更新