1 上传到文件中
static String doc1 = "hello world";
static String doc2 = "hello java world";
static String doc3 = "hello lucene world";
private static final String PATH = "D:/Eclipse/work/2018.11.24/index/lucene";
/**
* 1 将要查询的文本放到document中
* 2 创建IndexWriter对象
* 3 用indexWriter对象将 document 数据存入
* @throws IOException
*/
public static void createIndesWriter() throws IOException {
// 1)创建indexWriter对象 用来给将document写入内存
Directory directory = FSDirectory.open(Paths.get(PATH));
IndexWriterConfig indexWriterConfig = new IndexWriterConfig(new SimpleAnalyzer());
IndexWriter indexWriter = new IndexWriter(directory, indexWriterConfig);
System.out.println(indexWriter);
// 2)将文本写入每一个document的字段里面
Document document1 = new Document();
document1.add(new TextField("id", "1", Store.YES));
document1.add(new TextField("title", "doc1", Store.YES));
document1.add(new TextField("content", doc1, Store.YES));
Document document2 = new Document();
document2.add(new TextField("id", "2", Store.YES));
document2.add(new TextField("title", "doc2", Store.YES));
document2.add(new TextField("content", doc2, Store.YES));
Document document3 = new Document();
document3.add(new TextField("id", "3", Store.YES));
document3.add(new TextField("title", "doc3", Store.YES));
document3.add(new TextField("content", doc3, Store.YES));
// 3)用indexWriter 对象将 document对象写入内存
indexWriter.addDocument(document1);
indexWriter.addDocument(document2);
indexWriter.addDocument(document3);
indexWriter.commit();
indexWriter.close();
}
2 从文件中取出来
public static void getReader() throws IOException, ParseException {
//1)创建indexSearcher对象
Directory d = FSDirectory.open(Paths.get(PATH));//索引目录
IndexReader reader = DirectoryReader.open(d);//索引读入器
IndexSearcher indexSearcher = new IndexSearcher(reader);//索引搜索器
//2)创建query对象
String defaultStr = "content";//默认的搜索字段,如果搜索字段没有指定,就用默认的
Analyzer analyzer = new SimpleAnalyzer();//用它对搜索条件进行分词
QueryParser parser = new QueryParser(defaultStr, analyzer);
String strParser = "content:java";
Query query = parser.parse(strParser);
//3)用indexSearcher对象吧query对象传入
TopDocs topDocs = indexSearcher.search(query, 10000);//查询前10000个数据
System.out.println("查询的总命中数是"+topDocs.totalHits);
//4)搜索出对应的documentID,根据documentID找出对应的content
ScoreDoc[] scoreDocs = topDocs.scoreDocs;
for(ScoreDoc scoreDoc : scoreDocs) {
int docID = scoreDoc.doc;//获取文档编号
//5)将content传给前台
//根据文档id找到对应文档内容
Document document = indexSearcher.doc(docID);
System.out.println(document.get("id")+" \r");
System.out.println(document.get("title")+" \r");
System.out.println(document.get("content")+" \r");
}
}