Collector的使用和MultiReader的使用
来源:互联网 发布:c语言api帮助文档 编辑:程序博客网 时间:2024/06/10 05:45
Lucene版本用的是3.5.0,虽然版本比较老,但是Zoie支持这个版本。
package w0141112;import org.apache.lucene.index.IndexReader;import org.apache.lucene.index.MultiReader;import org.apache.lucene.index.Term;import org.apache.lucene.index.TermEnum;import org.apache.lucene.search.*;import org.apache.lucene.store.FSDirectory;import java.io.*;/** * User: zhijun.he@renren-inc.com * Date: 2014/11/12. */public class LuceneTask { public static void main(String[] args) { BufferedReader input = null; FSDirectory dir = null; IndexSearcher searcher = null; String[] path = {"/data/dmp_index/dmp_index_v1_0", "/data/dmp_index/dmp_index_v1_1"}; try { MultiReader reader = new MultiReader(new IndexReader[]{ IndexReader.open(FSDirectory.open(new File(path[0]))), IndexReader.open(FSDirectory.open(new File(path[1])))}); /*dir = FSDirectory.open(new File("/data/dmp_index/dmp_index_v1_0")); IndexReader reader = IndexReader.open(dir);*/ System.out.println("begin"); System.out.println(reader.numDocs()); /*TermEnum te = reader.terms(new Term("v", "stro04")); int cnt = 0; while (te.next()) { Term term = te.term(); if (term.field().equals("v")) { System.out.println(term.text()); if (++cnt == 200) { break; } } }*/ searcher = new IndexSearcher(reader); // Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_35); InputStream inputStream = new FileInputStream("input.txt"); input = new BufferedReader(new InputStreamReader(inputStream, "utf-8")); String tag; while ((tag = input.readLine()) != null) { System.out.print(tag + " "); TermQuery query = new TermQuery(new Term("v", tag)); MyCollector collector = new MyCollector(); searcher.search(query, collector); System.out.println(collector.cnt); } System.out.println("over"); } catch (IOException e) { e.printStackTrace(); } finally { try { if (searcher != null) { searcher.close(); } if (input != null) { input.close(); } } catch (Exception e) { e.printStackTrace(); } } }}class MyCollector extends Collector { int cnt = 0; public MyCollector() { super(); } @Override public void setScorer(Scorer scorer) throws IOException { } @Override public void collect(int i) throws IOException { cnt++; } @Override public void setNextReader(IndexReader indexReader, int i) throws IOException { } @Override public boolean acceptsDocsOutOfOrder() { return false; }}
这里只是统计了tag这两个索引文件中的数量。说明以下几点收获:
1.对于向两个索引文件一起查找,网上查询的结果是使用ParallelMultiSearcher或者MultiSearcher,但是这两个方法即使在lucene 3.5.0版本都已经deprecated了,所以使用了
MultiReader
2.collector的使用
可以看到这里collector其实根本没有加什么代码,就实现了统计的功能。需要指出的是collect方法是对于每一个匹配query的doc都会进入这个方法,目测i就是匹配的doc的id号了。那我为什么不适用search(query, int)那个方法呢?(我突然发现,用search(query,int)方法更合适,原先理解错了,就是无论int设置多少小,totalHits都会返回所有值...)但是需要指出的是这个int值绝对不能设置太大,因为它会开辟一个相同大小的队列,太大就会使java运行时报错,比如设置为Integer.MaxValue, 会报out of heap)
0 0
- Collector的使用和MultiReader的使用
- Collector for ArcGIS的使用体验
- Lucene Collector使用例子
- iH如何使用OPC Collector
- iHistorian OPC Collector的安装、配置和运行
- jmeter压测----环境准备(PerfMon Metrics Collector and Server Agent原理和使用)
- jmeter压测----环境准备(PerfMon Metrics Collector and Server Agent原理和使用)
- int?和??的使用
- ”##“ 和 "#" 的使用
- “$this->”和”::”的使用
- &和&&的使用区别
- Swift -- !和?的使用
- UIPickView的使用和
- Mybatis - # 和 $ 的使用
- C# ?和??的使用
- .和:的使用情况
- ExpandableListActivity的使用和SimpleExpandableListAdapter的使用
- 使用简单的DepthBuffer 和使用Lights
- MVC JQuery Validate使用总结
- unity4.6 UGUI做技能CD(补充篇)
- 纯CSS画的基本图形(矩形、圆形、三角形、多边形、爱心、八卦等)
- solr与hadoop结合
- MATLAB字符串转换函数
- Collector的使用和MultiReader的使用
- 话说2.6 内核 系统调用中的sys_open ,sys_read 不见了???
- C++ Primer再读笔记-4
- OV9650 的调试笔记(转)
- 介绍——基于类的视图(class-based view)
- Android自定义控件之自定义EditText,令控件中的字根据控件高度自动调整大小-FenGKun
- 【LeetCode】Binary Tree Inorder Traversal
- JAVA – 虚函数、抽象函数、抽象类、接口
- 华为上机练习题