lucene的分组查询(类似sql的group by)的解决方法
来源:互联网 发布:html单页源码 编辑:程序博客网 时间:2024/04/30 02:12
通过lucene搜索去除相同结果。
在网上找了很久到没有答案,到apache看了文档,http://lucene.apache.org/java/2_4_1/queryparsersyntax.html
搜索语法之中是没有类似group by的。只好换个思路,想到了过滤器。
结果发现了org.apache.lucene.search.DuplicateFilter这 个类。对此类的解释如下: "Full" processing mode starts by setting all bits to false and only setting bits for documents that contain the given field and are identified as none-duplicates. 这就是说这个过滤器可以保证搜索的唯一。这样就可以实现类似sql的group by(和group by还是有一定区别的,我想要的要求就是去除相同结果,但次方法经过修改也可实现group by 其他功能)。
多的不说了贴个例子自己研究下吧。
public static void main(String [] args) throws Exception{
RAMDirectory directory=new RAMDirectory();
IndexWriter writer=new IndexWriter(directory,new StandardAnalyzer(),true);
//数组中有3个重复值133700
String[] link ={"",
"shtml#Ayi:263791429",
"133700",
"133700",
"133700",
"#Ayi:468534543",
"#Ayi:-992539968",
"#Ayi:442193484"};
String[] parentLink={"110905.shtml",
"110905.shtml",
"110905.shtml",
"110905.shtml",
"905.shtml",
"5.shtml",
"110905.shtml",
"1"};
for (int i = 0; i < link.length; i++){
Document doc = new Document();
Field fields=new Field("link",link[i], Field.Store.YES, Field.Index.TOKENIZED);
doc.add(fields);
fields=null;
fields=new Field("plink","a"+i, Field.Store.YES, Field.Index.TOKENIZED);
doc.add(fields);
writer.addDocument(doc);
}
writer.optimize();
writer.close();
IndexSearcher indexSearcher=new IndexSearcher(directory);
QueryParser queryParser=new QueryParser("link",new StandardAnalyzer());
String xsfd="link:(133700)";
//实例化DuplicateFilter 参数为想要过滤的字段名
Filter filter = new DuplicateFilter("link");
Query query=queryParser.parse(xsfd);
Hits hits=indexSearcher.search(query,filter);
System.out.println(hits.length());
for(int j=0;j<hits.length();j++){
Document doc=(Document)hits.doc(j);
System.out.println(doc.get("link"));
}
}
注意:DuplicateFilter在lucene的核心包里并没有在lucene-queries-2.4.1.jar包中,找不到这个包就下个lucene源码在contrib\queries里。哎,还真的不太好发现。
注:以上转自http://hi.baidu.com/lewutian/blog/item/70b83a64775317fcf736541a.html
- lucene的分组查询(类似sql的group by)的解决方法
- lucene的分组(group by)
- 类似group by的分组计数功能
- SQL中group by分组查询的内容(包含to_char和order by)
- 类似SQL 的Group by功能
- JAVA模仿SQL的group by分组
- List模仿SQL的group by分组
- SQL Group By分组的使用
- sql中关于分组(group by)的理解
- SQL 统计分组 Group By和Compute By的整理
- SQL分组查询group by
- SQL group by分组查询
- SQL group by分组查询
- SQL group by分组查询
- group by分组的应用
- mysql分组查询group by时分页的实现。
- sql的分组统计与group by 日期的处理
- SQL语句:用count求group by分组的个数
- 指针类型的作用-图解
- 当前几个主要的Lucene中文分词器的比较
- yum 源问题:repodata/repomd.xml 404 Not Found
- 用Lucene的SpellChecker实现Google的“您是不是要找”功能
- LuCI界面开发之CBI模块
- lucene的分组查询(类似sql的group by)的解决方法
- osgi webservice cxf
- 关于Lucene中的updateDocument()方法的使用
- Hibernate学习之抓取策略与懒(延迟)加载
- 《C语言及程序设计》程序填空——一维数组初步
- 《C语言及程序设计》程序阅读——一维数组初步
- linux下gcc.gdb整理
- 利用Lucene打造站内搜索引擎的思路
- Django ElasticSearch Ionic 打造 GIS 移动应用 —— 架构设计