首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Solr语音匹配与实际文本字段

Solr语音匹配与实际文本字段
EN

Stack Overflow用户
提问于 2013-11-15 14:23:48
回答 2查看 5.9K关注 0票数 3

我对solr的结果有一个问题,我想我应该在这里寻求建议。

我已经启用了语音匹配,包括<filter class="solr.PhoneticFilterFactory" encoder="RefinedSoundex" inject="true"/>在查询和索引级别,也与编码器DoubleMetaphone作为一个变体。

这里的问题是solr只返回语音匹配的结果,而忽略通配符匹配或几乎精确的搜索短语匹配。

示例:

在我的索引中,我有一个名为'name‘和value 'Modenine’字段的文档,当我搜索name:mod时,我得到了一个"Modenine“,这是可以的,

但是当我使用name:mode搜索时,请注意额外的'e',它返回'Something Foul Mouth',这是因为,mouth语音匹配mode,因此我不介意使用“臭嘴”,但我也想看到'Modenine‘,因为mode是实际的搜索词。

在我看来,最快的解决方案是在索引过程中添加语音代码到索引中,然后使用dismax对结果进行排序,例如使用^2.0提供分数。

我有以下内容:字段声明

代码语言:javascript
复制
<field name="phoneticName" type="phonetics" indexed="true" stored="true"/>
<field name="name" type="phonetics" indexed="true" stored="true"/> 

语音学FieldType

代码语言:javascript
复制
<fieldType name="phonetics" class="solr.TextField" positionIncrementGap="100" multiValued="true">
    <analyzer type="index"> 
        <filter class="solr.LowerCaseFilterFactory"/>
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
        <filter class="solr.PhoneticFilterFactory" encoder="RefinedSoundex" inject="true"/>
    </analyzer>
    <analyzer type="query">             
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>        
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.PhoneticFilterFactory" encoder="RefinedSoundex" inject="true"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />       
        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>               
    </analyzer>
</fieldType>

但是在重新索引之后,phoneticName字段只有名称字段的确切值,它不存储我搜索的语音代码。

我找到了这个solr-boosting-down-phonetic-variations,但是没有太多的细节。

谢谢P

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-16 20:58:32

当我输入mod作为查询时,我终于开始工作了,我得到了大约5个相关的结果,包括modenine。我如何做到这一点是通过使用Ngram过滤器--这不是我刚刚发现的,事实上,我从一开始就将Ngram过滤器添加到schema.xml中的过滤器列表中,但从未像预期的那样工作过。

错误在于,我同时在indexquery级别/阶段应用了query。只能在index阶段添加Ngram,在查询阶段删除Ngram文件后,我得到了所需的结果。

请参阅下面的配置,注意我如何添加:solr.RemoveDuplicatesTokenFilterFactory以从NGramFilterFactory筛选器中删除可能的重复项。

代码语言:javascript
复制
<fieldType name="phonetics" class="solr.TextField" positionIncrementGap="100" multiValued="true">
    <analyzer type="index">         
        <filter class="solr.TrimFilterFactory"/>        
        <filter class="solr.NGramFilterFactory" minGramSize="2" maxGramSize="1000" />
        <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="1000"  />
        <filter class="solr.WordDelimiterFilterFactory" splitOnCaseChange="1" splitOnNumerics="0" 
        generateWordParts="1" stemEnglishPossessive="0" generateNumberParts="0"
        catenateWords="1" catenateNumbers="0" catenateAll="0" preserveOriginal="1"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>        
        <filter class="solr.DoubleMetaphoneFilterFactory" inject="true"/>
        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
    </analyzer>
    <analyzer type="query">     
        <filter class="solr.TrimFilterFactory"/>        
        <filter class="solr.WordDelimiterFilterFactory" splitOnCaseChange="1" splitOnNumerics="0" 
        generateWordParts="1" stemEnglishPossessive="0" generateNumberParts="0"
        catenateWords="1" catenateNumbers="0" catenateAll="0" preserveOriginal="1"/>        
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>        
        <filter class="solr.LowerCaseFilterFactory"/>       
        <filter class="solr.DoubleMetaphoneFilterFactory" inject="true"/>
    </analyzer>
</fieldType>

干杯

巴巴吉德

票数 3
EN

Stack Overflow用户

发布于 2013-11-15 16:32:56

您没有得到通配符匹配,因为您没有执行通配符搜索。name:mode*将匹配"modenine",尽管它不会在语音上匹配,因为通配符/前缀搜索不会被分析,这是有意义的,因为语音算法的工作假设它们使用的是一个完整的单词。

如果您想在这两个方面都进行搜索,则应该使用类似于:name:mode name:mode*的查询。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20003225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档