gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 02:40:43 29 4
gpt4 key购买 nike

我对 solr 结果有疑问,我想我应该在这里寻求建议。

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

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

例子:

在我的索引中,当我搜索 name:mod 时,我有一个包含名为“名称”的字段和值为“Modenine”的文档,我得到一个“Modenine”,这没问题,

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

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

我有以下内容:字段声明

<field name="phoneticName" type="phonetics" indexed="true" stored="true"/>
<field name="name" type="phonetics" indexed="true" stored="true"/>

用于语音的 FieldType

<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 字段只有 name 字段的准确值,它没有存储我要搜索的拼音代码。

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

谢谢

最佳答案

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

错误是我在 indexquery 级别/阶段都应用了 NgramFilter。Ngram 应该只在 index 阶段添加,在查询阶段删除 Ngram 文件管理器后,我得到了所需的结果。

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

<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>

干杯

巴巴吉德

关于Solr 语音匹配与实际文本字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20003225/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com