一、创建索引库 1.配置数据库各表所要建立索引字段的XML配置文件。 2.查询数据库中与索引字段匹配的数据。 3.开始创建索引库 String indexPath = "....."; File indexDir = new File(indexPath); FSDirectory dir = FSDirectory.getDirectory(indexDir); // 初始化分词器,本例使用的是庖丁解牛分词器 Analyzer analyzer = new PaodingAnalyzer(); // 初始化索引写入器 IndexWriter indexWriter = new IndexWriter(dir, analyzer, true, IndexWriter.MaxFieldLength.UNLIMITED); // 设置优化参数 indexWriter.setMergeFactor(1000); indexWriter.setMaxFieldLength(10240); indexWriter.setMaxBufferedDocs(100000); indexWriter.setRAMBufferSizeMB(32); // 开始写入,本例使用数据格式为List<HashMap> for (int i = 0; i < dataList.size(); i++) { Map data = dataList.get(i); // 创建索引对象 Document doc = new Document(); Field name = new Field("name", String.valueOf(data.get("name")), Field.Store.YES, Field.Index.NOT_ANALYZED, Field.TermVector.YES); doc.add(name); if (doc != null) { indexWriter.addDocument(doc); } } // 对索引进行清理,清理过程中将把所有标记为删除的文档物理删除。 indexWriter.optimize(); // 关闭索引写入器 indexWriter.close(); 二、检索索引库 String queryString = "test"; String indexPath = "...."; File indexDir = new File(indexPath); FSDirectory dir = FSDirectory.getDirectory(indexDir); // 初始化索引检索器 IndexSearcher isearcher = new IndexSearcher(dir); // 初始化分词器 Analyzer analyzer = new PaodingAnalyzer(); BooleanClause.Occur [] clauses = {BooleanClause.Occur.SHOULD}; Query query = MultiFieldQueryParser.parse(queryString, new String[] {"name"}, clauses, analyzer); // 此处必须传入一个返回条数,这里用searcher.maxDoc()表示返回所有条数。 ScoreDoc[] hits = isearcher.search(query, isearcher.maxDoc()).scoreDocs; // 初始化高亮显示器 SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter("<font color=/"red/">", "</font>"); Highlighter highlighter = new Highlighter(simpleHTMLFormatter, new QueryScorer(query)); highlighter.setTextFragmenter(new SimpleFragmenter(100)); // 初始化检索结果 List<HashMap> queryResult = new ArrayList<HashMap>(); for (int i = 0; i < hits.length; i++) { Map result = new HashMap(); Document doc = isearcher.doc(hits[i].doc); String name = highlighter.getBestFragment(analyzer, "name", doc.get("name")); result.put("name", name); queryResult.add(result); }