gpt4 book ai didi

apache - 如何在模糊匹配搜索结果之前显示 Solr 搜索完全匹配?

转载 作者:行者123 更新时间:2023-12-01 14:06:50 25 4
gpt4 key购买 nike

使用 Solr Apache。我想在搜索结果中先显示精确匹配,然后显示模糊匹配。

例如,我试图找到世界 test 但是在响应中我得到的结果是像 cast, latest 这样的世界在包含实际单词 的结果之前先测试

我试过这样的查询:test^100 OR test~^5 但这并没有改变结果的顺序,也许对查询的这种改变是不正确的。

我的 Solr 配置:

solrconfig.xml
<requestHandler name="/select" class="solr.SearchHandler">
<lst name="defaults">
<str name="echoParams">explicit</str>
<str name="defType">edismax</str>
<int name="rows">10</int>
<str name="df">text</str>
<str name="wt">php</str>
<str name="sort">score desc</str>
<str name="fl">*, score</str>

<!-- Highlighting defaults -->
<str name="hl">on</str>
<str name="hl.fl">*</str>
<str name ="hl.snippets">10</str>
<str name="hl.fragsize">250</str>
<str name="tie">0.1</str>
<str name="hl.simple.pre">&lt;b style="color:black;background-color:#888888"&gt;</str>
<str name="hl.simple.post">&lt;/b&gt;</str>
<str name="hl.usePhraseHighlighter">true</str>
<str name="hl.highlightMultiTerm">true</str>
<str name ="hl.useFastVectorHighligher">true</str>
<str name ="hl.maxAnalyzedChars">200000</str>
<str name="f.title.hl.alternateField">title</str>
<str name="f.description.hl.alternateField">description</str>
<str name="spellcheck">true</str>
</lst>

schema.xml  
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.NGramFilterFactory" minGramSize="3" maxGramSize="50"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.TrimFilterFactory" />
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
<filter class="solr.StandardFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.PorterStemFilterFactory"/>
<filter class="solr.PhoneticFilterFactory" encoder="DoubleMetaphone" inject="true"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
</analyzer>
</fieldType>

谢谢,

最佳答案

我正在寻找相同问题的解决方案。在浏览了一些文档和邮件程序论坛之后,我意识到 solr 中没有内置方法可以直接实现这一点。虽然这种方法不是很干净和高效,但我是这样解决这个问题的:

创建查询的副本并在每个单词的末尾附加“~”(波浪号),保留不带波浪号的查询副本并将其提高。结果的数量保持不变,只有完全匹配的排名更高。

For e.g: (bangalore)^20 (bangalore~)10

然而,这种方法可能不如正常搜索那么有效,因为每个术语都有两个需要搜索的标记,但如果相关性比效率更重要,则可以这样做。此外,查询中的额外术语不会像人们预期的那样减慢搜索速度。

关于apache - 如何在模糊匹配搜索结果之前显示 Solr 搜索完全匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16103012/

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