【问题标题】:Show specific document on top in search for specific keywords in solr在 solr 中搜索特定关键字时在顶部显示特定文档
【发布时间】:2015-05-06 08:26:56
【问题描述】:

假设,我的网站上列出了 1000 个服装卖家 (S1.....S1000)。由于所有卖家都向我支付了一些金额,因此我给他们相同的权重年龄,并根据相关性显示结果。

现在,我计划从高级服务开始,我想在搜索结果中为每个关键字列出一个供应商。比方说,S1 已经为关键字“牛仔裤”提供了高级搜索,所以如果用户搜索“牛仔裤”,我首先想在顶部显示该供应商,然后根据相关性显示其他供应商。此外,这项高级服务仅为期一个月。所以,另一家供应商说 S2 可以在下个月使用这项服务,依此类推。

是否有任何插件,我可以在其中存储应针对哪个关键字显示哪个供应商。我什至可以进行 2 次查询以满足期望的结果。

请推荐

【问题讨论】:

    标签: search plugins solr mapping relevance


    【解决方案1】:

    我认为查询提升组件是你的朋友,你可以为任何给定的查询配置哪些文档(以及哪些供应商)首先出现,请参阅

    https://wiki.apache.org/solr/QueryElevationComponent

    如果工作量太大,您还可以在文档中添加一个新的布尔字段,指示文档是否要升级,然后在查询中,首先按此字段排序(所以升级的文档排在最前面) ,然后按分数排序(因此大多数相关文档紧随其后)。

    【讨论】:

    • QueryElevation 组件将模式的唯一键作为 id 的参数。但是,在我的情况下并非如此。是否有可能我可以将任何其他字段作为此组件的 id。
    • 我不这么认为 - 文档说 uniqueKey 字段必须是字符串。您的文档中没有可以用作唯一键的字段?
    • 架构中只能有一个唯一字段。架构中的此卖方字段不是唯一字段。实际上,这些卖家的产品 id 是唯一的 id。请任何其他解决方案。
    • 我建议的另一个怎么样:在你的文档中添加一个新的布尔字段,指示该文档是否要提升,并且在查询中,首先按此字段排序(所以提升文档排在首位),然后按分数排序(因此大多数相关文档紧随其后)。
    • 我的意思是为每个文档添加一个布尔字段;布尔值对于促销卖家的产品为真,否则为假。随着卖家升职与否,您会更新索引;这样做相当简单。
    【解决方案2】:

    您也可以使用 reRanking 组件:

    https://cwiki.apache.org/confluence/display/solr/Query+Re-Ranking

    使用这样的查询:

    q=jean&rq={!rerank reRankQuery=$rqq reRankDocs=1000 reRankWeight=3}&rqq=(brand:S1)
    

    查询 jean 的前 1000 个结果将重新排名,这要归功于添加到包含值为 S1 的字段品牌的文档中的提升(3 个)。

    它可能很有用,但在你的情况下,我认为 QueryElevationComponent 是最好的。

    请注意,重新排名仅从 4.9 版开始可用。

    【讨论】:

      猜你喜欢
      • 2015-07-13
      • 1970-01-01
      • 1970-01-01
      • 2019-05-12
      • 2011-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多