我遇到了查询索引的问题,其中常见搜索词也恰好是散布在大多数文档中的公司名称的一部分。如何在不影响包含部分商家名称的搜索的排名的情况下排除结果中的商家名称?
示例:Bobs Automotive Supply是商业名称。
当有人搜索汽车或供应而不返回索引中的每个文档时,如何包含相关结果?
我试过“-'Bobs汽车用品'+''搜索字词'”,但这似乎排除了任何带有Bobs Automotive Supply的文件,并且在搜索“供应”或“汽车”方面效果不是很好
提前致谢。
答案 0 :(得分:1)
这里的第二个答案,基于第一个答案的补充说明。
一些选择。
在StopWordFilter中将商家名称添加为StopWords。这将阻止Solr对它们进行索引。使用它们的搜索只会真正搜索那些不在商家名称中的单词。
依靠Solr因术语频率而应用的固有评分。听起来这些术语会经常出现在索引中。对它们的查询仍将返回文档,但如果用户查询其他不太常见的术语,则会得到更高的分数。
对包含商家名称的文档应用低查询提升(不是非常消极,但少于其他文档)。 Solr相关性常见问题http://wiki.apache.org/solr/SolrRelevancyFAQ#How_do_I_give_a_negative_.28or_very_low.29_boost_to_documents_that_match_a_query.3F
答案 1 :(得分:0)
您是否知道该文章与商家名称相关联或衍生出来?如果是这样,您可以创建另一个字段,然后使用筛选查询排除与业务名称匹配的实体。像
这样的东西q=search_term&fq=business_name:(NOT search_term)
使用子查询可能会有所帮助,或者只是减少而不是过滤掉结果。
答案 2 :(得分:0)
编辑:更新问题使这个无关紧要。让它听到后人的声音。 :)
这就是Solr Documents有不同领域的原因。
在这种情况下,听起来有一个“页脚”字段与文档中的“正文”字段分开。执行搜索时,它们只会对Body执行,而Body不会包含来自Footer的数据。您甚至可以拥有第三个字段,即“OriginalContent”字段,其中包含用于显示目的的原始副本。你不会搜索它,只是存储它以供日后使用。
重要的是在架构中创建两个单独的字段,并确保将这些字段编入索引。