/** * @param key 搜索内容所在的字段名称 * @param value 所要搜索的内容 * @throws CorruptIndexException * @throws IOException * @throws ParseException */ public static void search(String key, String value) throws CorruptIndexException, IOException, ParseException { IndexSearcher searcher; // 创建QueryParser对象,第一个参数表示Lucene的版本,第二个表示搜索Field的字段,第三个表示搜索使用分词器 // Analyzer analyzer = new IKAnalyzer(); //new StandardAnalyzer(Version.LUCENE_36) // QueryParser qp = new QueryParser(Version.LUCENE_36, key,analyzer); searcher = new IndexSearcher(IndexReader.open(FSDirectory.open(new File(PATH)))); searcher.setSimilarity(new IKSimilarity()); Query query = IKQueryParser.parse(key, value); // Query tq = qp.parse(value); TopDocs topDocs = searcher.search(query, 10000); // searcher.search(query, results); // new function ScoreDoc[] scoreDocs = topDocs.scoreDocs; System.out.println("命中:" + topDocs.totalHits); Formatter formatter = new SimpleHTMLFormatter("<font color='red'>", "</font>"); Scorer fragmentScorer = new QueryScorer(query); Highlighter highlighter = new Highlighter(formatter, fragmentScorer); Fragmenter fragmenter = new SimpleFragmenter(50); highlighter.setTextFragmenter(fragmenter); Analyzer analyzer = new IKAnalyzer(); for (int i = 0; i < scoreDocs.length; i++) { ScoreDoc scoreDoc = topDocs.scoreDocs[i]; int docSn = scoreDoc.doc; // 文档内部编号 Document doc = searcher.doc(docSn); // 根据文档编号取出文档 hightlightFeild(highlighter, analyzer, doc, "name"); hightlightFeild(highlighter, analyzer, doc, "address"); hightlightFeild(highlighter, analyzer, doc, "datatype"); // scoreDocs[i]. System.out.println("name:" + doc.get("name")); // new function System.out.println("address:" + doc.get("address")); System.out.println("datatype:" + doc.get("datatype")); System.out.println("geom:" + doc.get("geom")); } }