使用 Solr 5.4 语音搜索邮政编码

Posted

技术标签:

【中文标题】使用 Solr 5.4 语音搜索邮政编码【英文标题】:Phonetically searching postal code with Solr 5.4 【发布时间】:2016-01-28 05:43:54 【问题描述】:

使用 Solr 5.4,我正在尝试按语音索引和搜索邮政编码。我尝试将 NGramFilterFactory 和 BeiderMorseFilterFactory 结合起来,但似乎不起作用。例如,我想存储和索引“AB11 9RD”并搜索为“a B 11 9 Rd”。我在这里发布我们的 schema.xml。任何实施技巧将不胜感激。

<types>
    <fieldType name="string" class="solr.StrField"/>
    <fieldType name="postcode" class="solr.TextField" omitNorms="true">
        <analyzer>
            <tokenizer class="solr.StandardTokenizerFactory"/>
            <tokenizer class="solr.NGramFilterFactory" minGramSize="1" maxGramSize="1"/>
        </analyzer>
    </fieldType>
    <fieldType name="postcode_phonetic" class="solr.TextField" omitNorms="true">
        <analyzer>
            <tokenizer class="solr.StandardTokenizerFactory"/>
            <tokenizer class="solr.NGramFilterFactory" minGramSize="1" maxGramSize="1"/>
            <filter class="solr.UpperCaseFilterFactory"/>
            <filter class="solr.BeiderMorseFilterFactory" nameType="GENERIC" ruleType="APPROX" concat="true" languageSet="auto"/>
        </analyzer>
    </fieldType>

<fields>
    <copyField source="Postcode" dest="PostcodePhonetic"/>
    <field name="Postcode"  type="postcode" indexed="true"  stored="true" multiValued="true"/>
    <field name="PostcodePhonetic"  type="postcode_phonetic" indexed="true" stored="false" multiValued="true"/>
    <field name="PostcodePhonetic2"  type="postcode_phonetic2" indexed="true" stored="false" multiValued="true"/>

【问题讨论】:

【参考方案1】:

这不是拼音搜索的意思 - 拼音搜索会将单词转换为它们的“拼音”表示,其中拼音表示只是意味着发音相似的名称转换为相同的标记。在这种情况下,一个例子是“nine”和“nhine”。

&lt;tokenizer class="solr.NGramTokenizerFactory" minGramSize="1" maxGramSize="1" /&gt; 与同义词过滤器一起使用,其中每个数字都有同义词作为其文本形式。如果您使用更大的 maxGramSize,您也可以将“11”转换为“11”。

【讨论】:

感谢您的回复。我会试一试并在这里分享结果【参考方案2】:

这是解决方案的更新。如果有人可以提出更好的解决方案,请这样做

<analyzer type="index">
    <charFilter class="solr.PatternReplaceCharFilterFactory" pattern="\b \b" replacement=""/>
    <tokenizer class="solr.KeywordTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt"/>
    <filter class="solr.ShingleFilterFactory" tokenSeparator="" minShingleSize="2" maxShingleSize="7" outputUnigrams="false"/>
    <filter class="solr.LengthFilterFactory" min="6" max="7"/>
  </analyzer>
</fieldType>

【讨论】:

以上是关于使用 Solr 5.4 语音搜索邮政编码的主要内容,如果未能解决你的问题,请参考以下文章

AI语音识别-我给浏览器加了个语音搜索功能

我给浏览器加了个语音搜索功能

Solr5.5.4+Zookeeper3.4.6+Tomcat8搭建SolrCloud集群

语音识别减少可能的搜索结果

实现语音搜索的最有效方法

solr5.5.4单机版安装