lucene Hello World
一个lucene创建索引和查找索引的样例:
创建索引:
public class Indexer { private IndexWriter indexWriter; /** * 构造器实例化indexWriter * @throws Exception */ public Indexer(String indexPath) throws Exception { Directory directory = FSDirectory.open(Paths.get(indexPath));//索引存储的位置 Analyzer analyzer = new StandardAnalyzer();//标准分析器 IndexWriterConfig iwc = new IndexWriterConfig(analyzer); indexWriter = new IndexWriter(directory, iwc); } /** * 关闭indexWriter * @param indexWriter * @throws IOException */ public void close() throws Exception { indexWriter.close(); } /** * 获取文档Document * @throws FileNotFoundException */ public Document getDocumnet(File f) throws Exception { Document doc = new Document(); doc.add(new TextField("content", new FileReader(f))); doc.add(new TextField("tittle",f.getName(),Field.Store.YES)); doc.add(new TextField("path",f.getCanonicalPath(), Field.Store.YES)); return doc; } /** * 索引当个文件 * @throws Exception */ public void indexFile(File f) throws Exception { System.out.println(f.getName()); Document doc = this.getDocumnet(f); indexWriter.addDocument(doc); } /** * 索引一个目录下的所有文件 * @param filePath 目录路径 * @return 索引文件的个数 * @throws Exception */ public int index(String filePath) throws Exception { File[] files = new File(filePath).listFiles(); for(File f:files) { this.indexFile(f); } return indexWriter.numDocs(); } public static void main(String[] args) { String indexPath = "G:\\工作\\luence\\index"; String dataPath = "G:\\工作\\luence\\data"; Indexer indexer = null; int indexNum=0; try { indexer = new Indexer(indexPath); indexNum = indexer.index(dataPath); } catch (Exception e) { e.printStackTrace(); }finally { try { indexer.close(); } catch (Exception e) { e.printStackTrace(); } } System.out.println("索引了"+indexNum+"个文件"); } }
查找索引:
public class Searcher { public static void search(String indexPath,String searchStr) throws Exception { Directory dir = FSDirectory.open(Paths.get(indexPath)); IndexReader indeReader = DirectoryReader.open(dir); IndexSearcher indexSearch = new IndexSearcher(indeReader); Analyzer analyzer = new StandardAnalyzer();//标准分词器 QueryParser parser = new QueryParser("content", analyzer); Query query = parser.parse(searchStr); TopDocs td = indexSearch.search(query, 10); for(ScoreDoc sc:td.scoreDocs) { Document doc = indexSearch.doc(sc.doc); System.out.println(doc.get("tittle")); System.out.println(doc.get("path")); } } public static void main(String[] args) throws Exception { Searcher.search("G:\\工作\\luence\\index\\", "Hollywood"); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具