我的 solr 4.1.0 安装没有找到任何带有语音编码的东西。schema.xml 的摘录:
<field name="textsuggest" type="text_suggest" indexed="true" stored="true" omitNorms="true" multiValued="true" />
<field name="textphon" type="text_phonetic_do" indexed="true" stored="true" omitNorms="true" omitTermFreqAndPositions="false" multiValued="true" />
<copyField source="textsuggest" dest="textphon"/>
...
<fieldType name="text_phonetic_do" class="solr.TextField"
positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory" />
<filter class="solr.GermanNormalizationFilterFactory" />
<filter class="solr.SynonymFilterFactory" synonyms="lang/synonyms_de.txt"
ignoreCase="true" expand="false" />
<filter class="solr.PhoneticFilterFactory" encoder="ColognePhonetic" inject="false" />
</analyzer>
</fieldType>
text_suggest
或多或少是原始文本的小写版本,用solr.StandardTokenizerFactory
and标记solr.WordDelimiterFilterFactory
。语音编码器是一种专门用于德语单词的编码器。同义词过滤器处理一些特定领域的词。我受到http://www.cominvent.com/2012/01/25/super-flexible-autocomplete-with-solr/的启发。
我用“Geprüfter Betriebswirt”和 textsuggest 中的其他项目索引一个条目。现在,当我搜索“Betriebswirt”时,我得到了预期的结果。然而,搜索“Betribswirt”这只是原始德语单词的一个小错误拼写,solr 报告 0 命中。
在 solr 的管理 gui 的分析视图中,我尝试了“Betriebswrt”和我的字段类型的不同拼写text_phonetic_do
,它们都被编码为相同的数字流:
- betriebswirt => 12718372
- betribswirt => 12718372
- betribswiirt => 12718372
- petribswiert => 12718372
因此编码(分析时间和搜索时间)按预期工作。但是如上所述,solr 在搜索拼音变体时没有找到任何文档。
我使用查询视图,甚至查询textphon:Betriebswirt
也不返回单个结果。完整的查询结果(我去掉了计时部分)如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">1</int>
<lst name="params">
<str name="debugQuery">true</str>
<str name="indent">true</str>
<str name="q">textphon:Betriebswirt</str>
<str name="wt">xml</str>
</lst>
</lst>
<result name="response" numFound="0" start="0">
</result>
<lst name="debug">
<str name="rawquerystring">textphon:Betriebswirt</str>
<str name="querystring">textphon:Betriebswirt</str>
<str name="parsedquery">textphon:12718372</str>
<str name="parsedquery_toString">textphon:12718372</str>
<lst name="explain"/>
<str name="QParser">LuceneQParser</str>
</lst>
</response>
我不知道为什么它什么也没找到。如果我正确理解调试输出,甚至会搜索索引以查找正确的(阅读:语音编码)令牌。
那么我错过了什么?谁能指出我正确的方向?谢谢