分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 代码编程

lucene

发布时间:2023-09-06 01:07责任编辑:赖小花关键词:暂无标签

1 全文检索工具,方便实现全文检索功能。

2 全文检索, 先对要搜索的文档进行分词,形成索引,根据索引经行检索。

3 全文检索流程

       索引流程:采集数据, 处理数据,创建索引

       搜索流程:输入查询条件,Lucene查询器查询索引, 索引库取出结果

IndexWriter是索引过程的核心组件,通过IndexWriter可以创建新索引、更新索引、删除索引操作。IndexWriter需要通过Directory对索引进行存储操作。

Directory描述了索引的存储位置,底层封装了I/O操作,负责对索引进行存储。它是一个抽象类,它的子类常用的包括FSDirectory(在文件系统存储索引)、RAMDirectory(在内存存储索引)。

public class IndexManager { ???@Test ???public void createIndex() throws Exception { ???????BookDao bookDao = new BookDaoImpl(); ???????List<Book> books = bookDao.queryBooks(); ???????List<Document> documents = new ArrayList<>(); ???????????????Document document = null; ???????for (Book book : books) { ???????????document = new Document(); ???????????Field id = new TextField("id", book.getId().toString(), Store.YES); ???????????Field name = new TextField("name", book.getName(), Store.YES); ???????????Field price = new TextField("price", book.getPrice().toString(), Store.YES); ???????????Field detail = new TextField("detail", book.getDetail(), Store.YES); ???????????document.add(id); ???????????document.add(name); ???????????document.add(price); ???????????document.add(detail); ???????????documents.add(document); ???????} ???????????????Analyzer analyzer = new StandardAnalyzer(); ???????IndexWriter indexWriter = null; ???????IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_4_10_3, analyzer); ???????Directory directory = FSDirectory.open(new File("E:\\index\\")); ???????indexWriter = new IndexWriter(directory, config); ???????????????for (Document d : documents) { ???????????indexWriter.addDocument(d); ???????} ???????indexWriter.close(); ???}}
View Code

5 搜索输入语法    and or  not  大写

 ???public void indexSearch() throws Exception { ???????QueryParser queryParser = new QueryParser("detail", new StandardAnalyzer()); ???????Query query = queryParser.parse("detail:好 AND 大"); ???????Directory directory = FSDirectory.open(new File("E:\\index\\")); ???????IndexReader indexReader = DirectoryReader.open(directory); ???????IndexSearcher searcher = new IndexSearcher(indexReader); ???????TopDocs docs = searcher.search(query, 10); ???????ScoreDoc[] scoreDocs = docs.scoreDocs; ???????for (ScoreDoc scoreDoc : scoreDocs) { ???????????int docId = scoreDoc.doc; ???????????Document document = searcher.doc(docId); ???????????System.out.println(document.get("id")); ???????????System.out.println(document.get("name")); ???????????System.out.println(document.get("detail")); ???????} ???????indexReader.close(); ???}
View Code

5 field 属性

         1 是否分词  tokenized 分词为了索引,(商品名称,描述,价格),不分词也可以索引(商品id)

          2 是否索引ndexed

         3 是否存储 stored 是否将field存到文档域中,存储目的显示。 名称,价格,id,图片地址

@Test ???public void createIndex() throws Exception { ???????BookDao bookDao = new BookDaoImpl(); ???????List<Book> books = bookDao.queryBooks(); ???????List<Document> documents = new ArrayList<>(); ???????????????Document document = null; ???????for (Book book : books) { ???????????document = new Document(); ???????????Field id = new StringField("id", book.getId().toString(), Store.YES); ???????????Field name = new TextField("name", book.getName(), Store.YES); ???????????Field price = new FloatField("price", book.getPrice(), Store.YES); ???????????Field detail = new TextField("detail", book.getDetail(), Store.NO); ???????????document.add(id); ???????????document.add(name); ???????????document.add(price); ???????????document.add(detail); ???????????documents.add(document); ???????} ???????????????Analyzer analyzer = new StandardAnalyzer(); ???????IndexWriter indexWriter = null; ???????IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_4_10_3, analyzer); ???????Directory directory = FSDirectory.open(new File("E:\\index\\")); ???????indexWriter = new IndexWriter(directory, config); ???????????????for (Document d : documents) { ???????????indexWriter.addDocument(d); ???????} ???????indexWriter.close(); ???}}
View Code

   6 修改索引

 ???@Test ???public void updateIndex() throws Exception { ???????Analyzer analyzer = new StandardAnalyzer(); ???????IndexWriter indexWriter = null; ???????IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_4_10_3, analyzer); ???????Directory directory = FSDirectory.open(new File("E:\\index\\")); ???????indexWriter = new IndexWriter(directory, config); ???????Document document = new Document(); ???????document.add(new TextField("name", "fdrr", Store.YES)); ???????indexWriter.updateDocument(new Term("name", "fddd"), document); ???????indexWriter.close(); ???}
View Code

lucene

原文地址:http://www.cnblogs.com/whesuanfa/p/7624730.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved