先来创建索引
//测试创建索引
@Test
public void testIndexWriter() throws IOException{
//创建索引目录
Directory directory = FSDirectory.open(new File("d:\\directory"));
//创建标准分词器
Analyzer analyzer = new StandardAnalyzer();
//索引配置
IndexWriterConfig indexWriterConfig =
new IndexWriterConfig(Version.LUCENE_4_10_2, analyzer);
indexWriterConfig.setOpenMode(OpenMode.CREATE);
//写索引
IndexWriter indexWriter = new IndexWriter(directory,indexWriterConfig);
//创建文档对象
Document doc = new Document();
doc.add(new IntField("id", 18, Store.YES));
doc.add(new TextField("title", "我们都是党的接班人yes or no?", Store.YES));
doc.add(new LongField("price", 6388L, Store.YES));
doc.add(new StringField("pic", "www.baidu.com", Store.YES));
//添加文档
indexWriter.addDocument(doc);
indexWriter.commit();
indexWriter.close();
}
先不用分词器搜索索引
@Test
public void testIndexSearch() throws Exception{
//创建索引目录
Directory directory = FSDirectory.open(new File("d:\\directory"));
IndexReader reader = DirectoryReader.open(directory);
IndexSearcher inexSearcher = new IndexSearcher(reader);
//创建查询对象
Query query = new TermQuery(new Term("title","接班人"));
//搜索前5条
TopDocs topDocs = inexSearcher.search(query, 5);
System.out.println("命中文档数:" + topDocs.totalHits);
ScoreDoc[] scoreDocs = topDocs.scoreDocs;
for(ScoreDoc scoreDoc:scoreDocs){
Document doc = inexSearcher.doc(scoreDoc.doc);
System.out.println("标题为:" + doc.get("title"));
}
}
再通过标准分词器来搜索
//测试搜索索引--分词器
@Test
public void testIndexSearch() throws Exception{
//创建索引目录
Directory directory = FSDirectory.open(new File("d:\\directory"));
IndexReader reader = DirectoryReader.open(directory);
IndexSearcher inexSearcher = new IndexSearcher(reader);
//创建分词器
Analyzer analyzer = new StandardAnalyzer();
//创建查询解析器
QueryParser queryParser = new QueryParser("title",analyzer);
//创建查询对象
Query query = queryParser.parse("接班人");
//搜索前5条
TopDocs topDocs = inexSearcher.search(query, 5);
System.out.println("命中文档数:" + topDocs.totalHits);
ScoreDoc[] scoreDocs = topDocs.scoreDocs;
for(ScoreDoc scoreDoc:scoreDocs){
Document doc = inexSearcher.doc(scoreDoc.doc);
System.out.println("标题为:" + doc.get("title"));
}
}