我们让 Solr 坐在我们客户的 Drupal 7 网站之一后面,虽然它运行良好,但对于应该非常具体的查询,它返回了太多结果。(它也有相关性/加权问题;但我希望解决这个问题将消除 - 从字面上 - 不相关的结果。)
例如,搜索短语 'particular phrase in london' 应该返回以它为标题的节点,非常高;我什至认为不应该返回任何其他内容。但我发现它返回了很多内容,纯粹是因为它提到了“伦敦”!
轻率地,搜索荒谬的短语“伦敦的馅饼”也会返回很多结果,显然只是因为他们提到了伦敦。网站上没有任何内容提到实际的馅饼皮。
当我搜索“伦敦的特定短语”时,以下是最终出现在服务器上 catalina.out 日志中的参数(为清楚起见,添加了空格):
{spellcheck=false&facet=true&f.im_field_health_topic.facet.mincount=1
&facet.mincount=1&f.ds_created.facet.date.gap=%2B1YEAR
&spellcheck.q=particular+phrase+in+london
&qf=taxonomy_names^2.0&qf=path_alias^5.0&qf=content^40&qf=label^21.0
&qf=tos_content_extra^1.0&qf=ts_comments^20&qf=tm_vid_3_names^200
&facet.date=ds_created
&f.ds_created.facet.date.start=1970-01-01T00:00:00Z/YEAR
&f.bundle.facet.mincount=1&hl.fl=content,ts_comments
&json.nl=map&wt=json&rows=10&fl=id,entity_id,entity_type,bundle,bundle_name,
label,is_comment_count,ds_created,ds_changed,score,path,url,is_uid,
tos_name,tm_node,zs_entity
&start=0&facet.sort=count&f.bundle.facet.limit=50&q=special+phrase+in+london
&f.ds_created.facet.date.end=2012-01-01T00:00:00Z%2B1YEAR/YEAR
&bf=recip(ms(NOW,ds_created),3.16e-11,1,1)^150.0
&facet.field=im_field_health_topic&facet.field=bundle
&f.im_field_health_topic.facet.limit=50&f.ds_created.facet.limit=50}
hits=1998 status=0 QTime=14
请注意,这些参数是由 Drupal 的 Apache Solr 模块构建的;我不相信我们有任何我们自己的特定自定义代码可以对它做任何事情。
如果直接在浏览器中输入,这对应于以下 URL:
http://example.com:8081/solr/CLIENT/select?spellcheck=false&facet=true&f.im_field_health_topic.facet.mincount=1&facet.mincount=1&f.ds_created.facet.date.gap=%2B1YEAR&spellcheck.q=particular+phrase +in+伦敦&qf=taxonomy_names^2.0&qf=path_alias^5.0&qf=content^40&qf=label^21.0&qf=tos_content_extra^1.0&qf=ts_comments^20&qf=tm_vid_3_names^200&facet.date=ds_created&f.ds_created.facet.date.start=1970-01-01T00:00 :00Z/YEAR&f.bundle.facet.mincount=1&hl.fl=content,ts_comments&json.nl=map&wt=json&rows=10&fl=id,entity_id,entity_type,bundle,bundle_name,label,is_comment_count,ds_created,ds_changed,score,path,url ,is_uid,tos_name,tm_node,zs_entity&start=0&facet.sort=count&f.bundle.facet.limit=50&q=particular+phrase+in+London&f.ds_created.facet.date.end=2012-01-01T00:00:00Z%2B1YEAR /YEAR&bf=recip(ms(NOW,ds_created),3.16e-11,1,1)^150.0&facet.field=im_field_health_topic&facet.field=bundle&f.im_field_health_topic.facet.limit=50&f.ds_created.facet.limit=50
此 URL 返回近 2000 个结果 - 这是网站上的大部分内容!我已经尝试一次删除每个查询参数,唯一有任何区别的似乎是 qf 和 q:如果我删除 qf,则结果为零;如果我删除 q,我会得到更多结果!
我想这里有两个问题:
- 这些参数中是否有任何内容告诉 Solr“不要担心出现‘特定短语’或‘馅饼皮’:只需整理‘伦敦’的结果”,然后按相关性排序?我要补充一点,我认为停用词文件中提到了“in”,所以我们可以忽略它的影响(?)
- 或者这是我需要更改的(标准 Drupal)模式中的内容吗?
我很欣赏有时搜索对访问者来说更好,如果它具有包容性;即使没有找到完美匹配,Google 也会返回结果。但是,除了停用词和词干之外,客户端确实要求搜索只返回所有单词都出现在内容中的结果。