【发布时间】:2016-07-01 11:28:24
【问题描述】:
我在我的一个项目中使用 SOLR 和 mongoDB 进行搜索。我必须说,SOLR 非常强大。 目前,如果查询是多词,我正在寻找一种方法来为不同的关键词设置不同的分数。
例如如果用户搜索黑色娃娃屋
黑色的重量应该大于娃娃,娃娃的重量应该大于房子。
黑色 > 娃娃 > 房子
是否可以在 SOLR 中实现这一点。如果是,怎么做?
【问题讨论】:
标签: solr
我在我的一个项目中使用 SOLR 和 mongoDB 进行搜索。我必须说,SOLR 非常强大。 目前,如果查询是多词,我正在寻找一种方法来为不同的关键词设置不同的分数。
例如如果用户搜索黑色娃娃屋
黑色的重量应该大于娃娃,娃娃的重量应该大于房子。
黑色 > 娃娃 > 房子
是否可以在 SOLR 中实现这一点。如果是,怎么做?
【问题讨论】:
标签: solr
您可以在标准 lucene 查询语法中为每个术语赋予单独的权重(在名为 text 的字段中搜索):
text:black^10 text:doll^5 text:house
这将使black 的权重是house 的十倍,doll 的权重是house 的五倍,但只有black 的一半权重。您必须调整权重才能获得所需的结果。如果您想使用 q= 字段中的常规文本并将 (e)dismax 作为查询解析器,您可以使用 bq 将这些提升与查询本身分开添加。
【讨论】:
bq 和field:foo^boost-syntax 来保持你的查询与它已经是一样的。如果不将这些提升添加到某处的术语中,您将无法提升单个术语:-)
您是否尝试过提升查询中的字词。您可以为查询中的术语指定不同的提升值。 示例:如果您将查询转换为:
textfeild:black^6 textfeild:doll^5 textfeild:house^2
您得到的结果与顶级文档将匹配为黑色、下一个黑色、下一个与房子。
它将术语权重与提升值相乘。这里黑色 6,娃娃 5,房子 2。
【讨论】:
Boost Query(bq),它指定了一个术语或短语应该被“提升”的因素