论坛首页 Java企业应用论坛

solr能否满足OR条件自定义数量限制的需求

浏览 3756 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-08-09  
有这样一个查询(key1 : val1) OR (key1 : val2) OR (key1 : val3),
如果最终结果中,三个条件都各自有100个符合的结果,最终会返回300条结果。

现在我有这种需求:要求返回30条结果,但是保证三个条件各自返回10条,能不能实现??还是lucene可以实现?
   发表时间:2012-08-09  
wjyuian 写道
有这样一个查询(key1 : val1) OR (key1 : val2) OR (key1 : val3),
如果最终结果中,三个条件都各自有100个符合的结果,最终会返回300条结果。

现在我有这种需求:要求返回30条结果,但是保证三个条件各自返回10条,能不能实现??还是lucene可以实现?


  有个问题,就是如果“三个条件都各自有100个符合的结果,最终会返回300条结果”,你考虑过有没有重复的文档数,而且你的是在同一个字段(key1)中检索的。
   正常情况下,如果是OR条件,如果取30条就是得分最高的前30条记录,不能够区分出每个 key:val是不是均分10条记录,可能有的key:val查询得分较高。不考虑效率性能问题,最简单的就是查询三次,每次取10条,凑成30条,也可以使用并发来做,solr支持多线程并发操作滴。
   如果key是不分词的,如string类型字段,这样的话可以保证有300条结果,也即没有重复的文档数,完了既然是不分词字段,就可以使用solr的group来做,之后从结果中过滤value即可,group=true&group.field=key
   如果key是分词字段,很难避免文档的重复性,暂时还木牛想到。
   
  
0 请登录后投票
   发表时间:2012-08-09  
诗意生活 写道
wjyuian 写道
有这样一个查询(key1 : val1) OR (key1 : val2) OR (key1 : val3),
如果最终结果中,三个条件都各自有100个符合的结果,最终会返回300条结果。

现在我有这种需求:要求返回30条结果,但是保证三个条件各自返回10条,能不能实现??还是lucene可以实现?


  有个问题,就是如果“三个条件都各自有100个符合的结果,最终会返回300条结果”,你考虑过有没有重复的文档数,而且你的是在同一个字段(key1)中检索的。
   正常情况下,如果是OR条件,如果取30条就是得分最高的前30条记录,不能够区分出每个 key:val是不是均分10条记录,可能有的key:val查询得分较高。不考虑效率性能问题,最简单的就是查询三次,每次取10条,凑成30条,也可以使用并发来做,solr支持多线程并发操作滴。
   如果key是不分词的,如string类型字段,这样的话可以保证有300条结果,也即没有重复的文档数,完了既然是不分词字段,就可以使用solr的group来做,之后从结果中过滤value即可,group=true&group.field=key
   如果key是分词字段,很难避免文档的重复性,暂时还木牛想到。
   
  


谢谢!!

我再描述一下场景,,key1是一个不分词的字段,也是string类型。

上面说的,并发操作,然后自己合并,主要是分页问题比较难搞,而且每次都需要多次查询,性能牺牲太大。

你说的group功能,我还没试过,我去研究下先
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics