2012-01-24 143 views
3

我在查询索引时遇到了一个问题,在该索引中,常见搜索字词也是公司名称的一部分,这些公司名称是散布在大多数文档中的一部分。如何在结果中排​​除业务名称而不影响包含部分业务名称的搜索的排名?SOLR查询排除

示例:Bobs Automotive Supply是商业名称。

如果有人搜索汽车或供应商而没有返回索引中的每个文档,如何包含相关结果?

我试过“-'Bobs汽车供应” +‘搜索词’”但是这似乎排除与鲍勃汽车供应任何文件,而不是对搜索非常有效‘供给’或‘汽车’

谢谢提前。

回答

0

您是否知道该文章与商业名称绑定或派生?如果是这样,您可以创建另一个字段,然后使用过滤器查询排除与商家名称匹配的实体。类似于

q=search_term&fq=business_name:(NOT search_term) 

对此使用子查询或仅对其进行加速而不是过滤掉结果可能会有帮助。

+0

自定义字段不是真正的选项,因为这些是市场营销材料,其中包含的名称超过了非常多次。你可以提升一个词组而不影响词组中的单个词吗?如果是这样的话,我可以创建一个排除领域。 – renhack

0

编辑:更新到问题使这个不重要的事情。留下它听到后代。 :)

这就是为什么Solr文档有不同的字段。

在这种情况下,听起来好像文档中有一个与您的“正文”字段分开的“页脚”字段。当执行搜索时,他们只会对Body进行搜索,而不会包含来自Footer的数据。您甚至可以拥有第三个字段,即“OriginalContent”字段,其中包含用于显示目的的原始副本。你不会搜索它,只是将它存储以备后用。

重要的部分是在您的模式中创建两个单独的字段,并确保您索引那些您希望能够搜索的字段。

+0

问题是企业名称散布在整个文档中。似乎没有一种简单的方法可以通过自定义字段来排除它。 – renhack

+0

请更新您的问题以反映这一点。你只描述它在页脚中。 – rfeak

+0

你说得对。问题已更新。 – renhack

1

第二个答案在这里,根据第一个答案的额外说明。

有几个选项。

  1. 在StopWordFilter中添加StopWords的商户名称。这将阻止Solr将它们编入索引。使用它们的搜索只会真正搜索那些不在商业名称中的单词。

  2. 依靠Solr根据Term频率应用的固有得分。这听起来像这些条款将经常在索引中。对他们的查询仍然会返回文档,但如果用户查询其他不常用的词条,那么这些词将获得更高的分数。

  3. 对包含业务名称的文档应用低查询提升(不是很负面,但小于其他文档)。 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