Solr-如何提高早期比赛的分数?

Solr-如何提高早期比赛的分数?,solr,Solr,如何提高查询与之前某个特定字段匹配的文档的分数。例如,搜索“超人”应该给“超人返回”一个比“有我的超人”更高的分数。这可能吗?在网上读了很多关于这方面的内容后,我自己解决了这个问题。对我特别有帮助的是关于nabble的回复,它是这样的(我使用了Demax,所以在这里解释): 创建一个名为say'nameString'的单独字段,该字段将值存储为“\u START” 将搜索查询更改为“\u开始” 添加新字段nameString,作为要在查询字段param(qf)中查找的字段之一 搜索时,使用参数

如何提高查询与之前某个特定字段匹配的文档的分数。例如,搜索“超人”应该给“超人返回”一个比“有我的超人”更高的分数。这可能吗?

在网上读了很多关于这方面的内容后,我自己解决了这个问题。对我特别有帮助的是关于nabble的回复,它是这样的(我使用了Demax,所以在这里解释):

  • 创建一个名为say'nameString'的单独字段,该字段将值存储为
    “\u START”
  • 将搜索查询更改为
    “\u开始”
  • 添加新字段
    nameString
    ,作为要在查询字段param(qf)中查找的字段之一
  • 搜索时,使用参数pf(短语字段)作为短语斜率为1或2的新字段
    nameString
    (值越低,搜索越严格)
您的最终查询参数如下所示:

q=_START_ <actual query>
defType=dismax
qf=name nameString /* look in name field as well as nameString field */
pf=nameString /* phrase field in nameString */
ps=2 /* phrase slop */
q=\u开始\u
defType=demax
qf=名称字符串/*查找名称字段和名称字符串字段*/
pf=名称字符串/*名称字符串中的短语字段*/
ps=2/*短语斜率*/

检查选项@

嗯,将前几个单词显式存储在另一个字段中,并在该字段上增强匹配。问题是,查询的大小可能从3个字符到100个字符不等,因此很难确定单独索引的单词/字符数。其次,假设我索引了前25个字符,其中一条记录有“my super man blah..”,另一条记录有“super man returns blah..”——这两条记录都与查询“super man”匹配,当我提升这个辅助字段时,这两条记录都将提升。谢谢您的回答。但我今天用我在回答中概述的方法解决了这个问题,但如果这些词不是在一开始就出现的话,这是行不通的。可能还想查看有效负载,您可以在第二个选项中添加索引时间建议。我也会查看。但是,通过微调ps参数使其更宽松,可以使当前的解决方案在很大程度上发挥作用。我目前使用2(pf中2个术语之间的距离),对于我的中等大小的数据集(1000条记录,内容差异很大)来说,它似乎工作得很好。我会检查你的观点,让你知道它是否有帮助。你能详细解释一下吗?例如:如果你有两条记录,其中有字段数据“蜘蛛侠返回”和“神奇蜘蛛侠”-当你搜索“蜘蛛侠”时,这两条记录的排名是相等的-上述策略将它们存储为“开始蜘蛛侠返回”和“启动神奇蜘蛛侠”-搜索查询被修改为“启动蜘蛛侠”,而不仅仅是“蜘蛛侠”-这样“启动蜘蛛侠返回”“与其他记录相比,分数更高,因为它与搜索查询的匹配度更高。因此,我们需要在每个名称之前添加START?是的,但不是在包含名称的原始字段中。我们保持原始名称字段不变,并在索引中创建一个单独的字段(仅用于搜索,不用于显示),我们将在其中以“开始”的形式存储名称。顺便说一句,我早在2012年就这样做了,当时它仍然是Solr。3.5.x左右。现在Solr已经在版本5中了,现在可能有一种更干净更简单的方法来实现这一点。