1.最基本的创建索引:
@Test public void testIndex(){ try { Directory directory = FSDirectory.open(new File(LUCENE_DIRECTORY)); IndexWriter indexWriter = new IndexWriter(directory,new IndexWriterConfig(Version.LATEST,new StandardAnalyzer())); Document document = new Document(); TextField titleFiled = new TextField("name","jiaoyiping", Field.Store.YES); document.add(titleFiled); indexWriter.addDocument(document); indexWriter.commit(); indexWriter.close(); } catch (Exception e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } }
2.使用FieldType创建索引
//使用FieldType创建Field(4.X之后才有) @Test public void testCreateIndexUseFieldType(){ try { Directory directory = FSDirectory.open(new File(LUCENE_DIRECTORY)); IndexWriter indexWriter = new IndexWriter(directory,new IndexWriterConfig(Version.LATEST,new StandardAnalyzer())); Document document = new Document(); FieldType titleType = new FieldType(); titleType.setIndexed(true);//索引选项 titleType.setStored(true); //存储选项 Field field = new Field("title","下班",titleType); TextField titleFiled = new TextField("name","jiaoyiping", Field.Store.YES); document.add(titleFiled); document.add(field); indexWriter.addDocument(document); indexWriter.commit(); indexWriter.close(); } catch (Exception e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } }
搜索示例:
/** * 搜索示例 */ @Test public void testQuery(){ try { IndexReader indexReader = DirectoryReader.open(FSDirectory.open(new File(LUCENE_DIRECTORY))); IndexSearcher searcher = new IndexSearcher(indexReader); QueryParser queryParser = new QueryParser("title",new StandardAnalyzer()); Query query = queryParser.parse("下班"); ScoreDoc[] docs = searcher.search(query,20).scoreDocs; //命中的数组 for(ScoreDoc sd:docs){ int docNumber = sd.doc; System.out.println("文档号: "+docNumber); Document doc = searcher.doc(docNumber);//根据文档号来查询文档 System.out.println(doc.get("name")); } } catch (Exception e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } }