【问题标题】:Solr Custom Boosting if a specific field matches the query如果特定字段与查询匹配,则 Solr 自定义提升
【发布时间】:2014-08-07 05:03:42
【问题描述】:

我们正在尝试通过自定义增强实现一个非常有趣的搜索逻辑,我想知道 Solr 是否可以支持这一点。 我们的索引中有以下字段:

  • 姓名
  • 说明
  • 关键字(数组)

每个关键字都会有一个数量(整数值)与之配对。

在名称、描述和关键字字段中运行搜索。如果某个关键字与搜索文本匹配,则必须仅根据匹配关键字的数量来提升相应的索引。

我已通读 Solr DisMax,他们只能使用固定数量提升字段。

我的方案是仅根据匹配的关键字将结果提高 X 量。

提前致谢

【问题讨论】:

  • 功能查询:wiki.apache.org/solr/FunctionQuery 实现您正在尝试做的部分工作。问题是您希望根据 field 的匹配部分而不是 field 来设置 boost。关键字的差异很大吗?如果是这样
  • 关键字会有差异,因为它是用户提供的值。我想知道我们如何将关键字及其相应数量存储在索引中,因为到目前为止我没有看到 Solr 支持二维数组。感谢您的回复@omu_negru

标签: solr


【解决方案1】:

我看到这个问题的唯一可行解决方案(当然假设您事先不知道关键字的数量)是将查询作为过滤查询(跳过评分阶段),获取所有文档匹配(有点问题),然后使用匹配的术语对它们进行排序以构建 java 比较器。

当您获得特别大量的文档时可能会出现问题,但您可以通过分页来避开这个问题

【讨论】:

  • 您的回答让我想到通过执行初始查询以显式获取与我的查询文本匹配的关键字来动态构建我的提升查询。根据我的初始查询结果,我可以遍历关键字来构造我的提升查询,例如“bq=keyword:matchkeyword1^amt1 bq=keyword:matchkeyword2^amt2 ...”
  • 似乎还不支持多个 bq 值link
【解决方案2】:

如果您没有太多不同的金额,也许您可​​以在索引时间尝试这个:

根据数量将“关键字”存储在不同的字段中(dynamicfields->boost-*):

boost-1 = keyword1,keyword4,keyword6 <br/>
boost-10 = keyword2<br/>
boost-100 = keyword5

您可以搜索所有增强字段(edismax),在您的(e)dismax conf(boost-1^1,boost-10^10,boost-100^100) 中使用他的数量增强每个动态字段。

【讨论】:

  • 因为这些是用户生成的关键字,我怀疑有一个有限的集合可供选择
  • @Roy 感谢您的回复,基于金额的动态字段听起来像是赢家,但如果我们有一个有限集
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-16
  • 2012-11-08
  • 1970-01-01
  • 1970-01-01
  • 2014-01-05
  • 1970-01-01
相关资源
最近更新 更多