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