民间,
我们想在solr上进行搜索,以便在句子中优先考虑部分匹配。
让我们举例说:
句子就像“今天在这里度过美好的夜晚”
如果用户提供“今天在这里”,那么它应该匹配。
如果用户提供“精彩的晚会”,那么它应该匹配。
如果用户提供“Have wonderful”,那么它应该匹配。
与上述相比,我们希望对关键词搜索给予低优先级。
关键字匹配可以是:“今天”“精彩”,“晚上”等。
这有什么办法可以实现solr,因为solr适用于给定句子上的单词的倒排索引。
答案 0 :(得分:0)
你可以使用一个单独的字段,其中定义了SingleFilter - 这会将令牌的运行组合成单独的标记,这样“今天在这里度过美好的夜晚”可以被编入索引为“有美好的”,“美好的夜晚” ,“今天晚上”和“今天在这里”。
使用qf=shinglefield^<boostvalue>
使此字段中的匹配优先级高于常规搜索字段中的匹配数 - 确切的提升值需要取决于索引的评分配置文件以及是否正在执行其他操作
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ShingleFilterFactory" maxShingleSize="2" outputUnigrams="false"/>
</analyzer>