@Configuration
@Component
@Log4j2
public class LuceneSearch {
/**
* 创建搜索
* @throws Exception
*/
public void search() throws Exception{
// 1. 创建 Directory 告知在哪里进行搜索
Directory directory = FSDirectory.open(new File("E:/lucene/index01")); // 创建在硬盘中
// 2. 创建 IndexReader
try {
IndexReader indexReader = IndexReader.open(directory);
//3.根据 IndexReader 创建 IndexSearch
IndexSearcher indexSearcher = new IndexSearcher(indexReader);
// 4. 创建 搜索的
// 创建 queryParser
Analyzer analyzer =new StandardAnalyzer(Version.LUCENE_35);// 分词器
String f ="content" ; // 声明一个 f 表示的是 要 搜索的搜索域为content
QueryParser queryParser =new QueryParser(Version.LUCENE_35,f,analyzer);
String Strquery = "java";
// 创建搜索的内容包含 什么的
Query query =queryParser.parse(Strquery); // 表示搜索的搜索域为content中包含风筝误的文档
// 5. 根据 indexSearcher 搜索并返回 TopDocs 10: 表示显示10条
TopDocs topDocs=indexSearcher.search(query,10);
// 6.根据topDocs 获取scoreDocs 对象
ScoreDoc[] scoreDocs=topDocs.scoreDocs;
// 遍历
for (ScoreDoc scoreDoc :scoreDocs){
// 7.根据 indexSearcher 和 scoreDocs 获取 Document
Document document= indexSearcher.doc(scoreDoc.doc);
// 8. 根据 Document 获取需要的值
String content= document.get("content");
String path = document.get("path");
String filename=document.get("filename");
log.info("文档的id------>"+scoreDoc.doc);
log.info("获取的文件名称是:"+filename+"-------->【它所在的位置在:+"+path+"+】"+"+其内容是:--------------------------->"+content);
log.info("<---------------------------------获取的文件名称是:"+filename+"-------->【它所在的位置在:+"+path+"+】"+"+其内容是");
}
// 9.关闭
indexReader.close();
}catch (Exception e){
e.printStackTrace();
}finally {
try {
}catch (Exception e){
e.printStackTrace();
}
}
}
}
@RunWith(SpringRunner.class)
@SpringBootTest
public class LuceneSearchTests {
@Autowired
private LuceneIndex luceneIndex;
@Autowired
private LuceneSearch luceneSearch;
/**
* 测试创建索引
*/
@Test
public void CreateSearchTest() throws Exception{
luceneSearch.search();
}
}