4

我的 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.StandardTokenizerFactoryand标记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>

我不知道为什么它什么也没找到。如果我正确理解调试输出,甚至会搜索索引以查找正确的(阅读:语音编码)令牌。

那么我错过了什么?谁能指出我正确的方向?谢谢

4

0 回答 0