使用Solr Apache。我想首先显示匹配,然后在搜索reault中显示模糊匹配。
例如,我尝试找到世界测试然而在回复中,我得到的结果包含强制转换,最新等结果,其结果包含实际的单词测试首先。
我尝试了这样的查询: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"><b style="color:black;background-color:#888888"></str>
<str name="hl.simple.post"></b></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>
谢谢,
答案 0 :(得分:0)
我一直在寻找同样问题的解决方案。经过几个文档和邮件论坛后,我意识到solr中没有内置的方法来直接实现这一点。 虽然这种方法不是一个非常干净和有效的方法,但这就是我解决这个问题的方法:
创建查询的副本,并在每个单词的末尾附加'〜'(代字号),保留查询的副本,不要使用代字号,然后将其提高。结果数量保持不变,只有完全匹配的排名更高。
For e.g: (bangalore)^20 (bangalore~)10
然而,这种方法可能不如普通搜索那么有效,因为每个术语都有两个需要搜索的令牌,但如果相关性的优先级高于效率,则可以这样做。此外,查询中的额外术语不会像人们期望的那样减慢搜索速度。
答案 1 :(得分:0)
一种使用“提升排名条件”的方法,创建一个布尔查询,将主要查询部分标记为强制,并将排名条件标记为可选,以提高效率。
您的查询应如下所示:
+(test OR test~) test^100
这样,由于加号+
,括号之间的内容是必需的,而外部的内容则是具有高提升的可选内容
您可以在此处了解更多信息:https://wiki.apache.org/solr/SolrRelevancyCookbook#Boosting_Ranking_Terms