【问题标题】:Solr - How to get fuzzy results on price?Solr - 如何获得模糊的价格结果?
【发布时间】:2012-02-23 18:49:08
【问题描述】:

在我的数据中,我有两个字段,类别和价格。我希望能够查询一个范围,价格:[500 TO 1000] 和类别:电子,但仍然返回低于 500 和超过 1000 的结果,只是根据与范围的差异,它们的相关性得分较低。

即我想展示:

产品1 $500
产品2 $550
产品3 $650
产品4 $900
产品5 $450
产品6 $475
产品7 $1200

有人可以解释一下这是如何实现的吗?

谢谢, 画了

【问题讨论】:

  • 您能否在架构中添加错误结果和价格字段定义的示例?
  • 这里是价格字段: 现在我可以查询我的确切结果想要,但我不确定如何查询模糊结果并根据相关性对它们进行评分。例如,我可以拉回 500-1000 的结果,但我也想要超出该范围的值,只是相关性较低。
  • 您应该尝试将范围值提高得更高,以便它们出现在其他范围值之前。
  • 我认为我需要的是一个函数,可以对超出该范围的结果产生负面影响。例如,500 到 1000 的范围的中值为 750。因此,值 450 是距中值 300 的净距离,而 1100 是距中值 350 的净距离。我只是不确定如何将其应用于查询。
  • 这是我最终用来计算的公式:recip(abs(sub(map(price,500,1000,750),750)),1,1000,1000)

标签: search solr lucene


【解决方案1】:

您能否尝试使用edismax 查询解析器和boost query 将价格范围提高到比其他更高。

bq=price:[500 TO 1000]^10

这将使该范围内的所有价格都高于另一个价格,从而使它们处于领先地位。

【讨论】:

  • 我在这个查询中尝试过:localhost:8080/solr/select?q=*:*&deftype=dismax&fl=price,score&bq=price:[500%20TO%201000]^10&numrows=50,但它返回了以下结果: 475、395、420、493、480、525、490
  • 你在使用 edismax 查询解析器吗? defType=edismax ?
  • dismax和edismax我都试过了,结果都是一样的。我正在运行 solr 3.5。
  • 我尝试了样本数据,效果很好。你能发布你的价格配置吗?和数据样本?
  • 价格配置:
猜你喜欢
  • 1970-01-01
  • 2012-07-11
  • 1970-01-01
  • 2021-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-07
  • 1970-01-01
相关资源
最近更新 更多