Solr5搜索不显示基于分数的结果

时间:2015-06-13 10:36:36

标签: solr solr5

我正在实施Solr搜索,搜索顺序不会根据得分显示。让我们说如果使用搜索关键字作为.net ios,它会根据得分返回结果。我有一个字段标题,其中包含以下数据

KeySkills:Android,ios,Phonegap,ios
KeySkills:.net,.net,.net,MVC,HTML,CSS

此处,当我搜索 .net ios 作为搜索关键字 net,.net,.net,MVC,HTML,CSS 应该在搜索结果中排在第一位且得分应该是更高,因为它包含.net 3次,但我得到相反的结果。

是否需要在solr配置文件或schema.xml文件中进行任何设置才能实现此目的,或者如何根据搜索字符串的最大出现次数对结果进行排序。请帮我解决这个问题。

以下是我得到的结果

{
"responseHeader": {
"status": 0,
"QTime": 0,
"params": {
 "indent": "true",
 "q": ".net ios",
 "_": "1434345788751",
 "wt": "json"
 }
 },
 "response": {
 "numFound": 2,
 "start": 0,
     "docs": [
    {

    "KeySkills": "Android, ios, Phonegap, ios",
    "_version_": 1504020323727573000,
    "score": 0.47567564

   },
   {

    "KeySkills": "net, net, net, MVC, HTML, CSS",
    "_version_": 1504020323675144200,
    "score": 0.4726259
  }
]
}
}

1 个答案:

答案 0 :(得分:0)

正如您在Lucene's doc中所看到的,得分不仅仅通过匹配术语的数量进行估算:

  

score(q,d) = coord(q,d) · queryNorm(q) · ∑( tf(t in d)· idf(t)²·t.getBoost()·norm(t,d) )

     

其中     tf(t in d)与术语的频率相关,定义为数字   时间段t出现在当前评分的文件中。

     

idf(t)代表反向文档频率。该值相关   到docFreq的倒数(术语t的文档数量   出现)。这意味着更罕见的术语对总数的贡献更大   得分了。

     

coord(q,d)是基于有多少查询字词的分数因子   在指定的文件中找到。

     

t.getBoost()是查询q中术语t的搜索时间提升   在查询文本中指定。

     

norm(t,d)封装了一些   (索引时间)提升和长度因素:

     
      
  • Field boost
  •   
  • lengthNorm   当文档按照索引添加到索引时计算   文档中此字段的标记数,因此更短   字段对分数贡献更多。
  •   
     

将文档添加到索引时,以上所有因素都是   相乘。如果文档有多个具有相同名称的字段,   所有他们的提升成倍增加:

     

norm(t,d)= lengthNorm·Πf.boost()

所以,在这里,我想"KeySkills": "Android, ios, Phonegap, ios"在你的另一个文件之前,因为它包含的文字少于另一文件。

要检查这一点,您可以使用这个很棒的工具,explain.solr.pl