了解Lucene(车辆名称映射Demo)

这篇具有很好参考价值的文章主要介绍了了解Lucene(车辆名称映射Demo)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Lucene

源码地址:LuceneDemo码云

全文检索技术

传统搜索流程

了解Lucene(车辆名称映射Demo),lucene,全文检索,搜索引擎

基于Lucene搜索流程

了解Lucene(车辆名称映射Demo),lucene,全文检索,搜索引擎

1、Lucene

1.1、什么是Lucene

全文检索引擎工具包

通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式

1.2、主要功能

构建索引库(以数据库中的数据构建)
  • 创建文档

    将数据库查询的每条数据信息“赋值”给创建的每个Document对象

  • 分析文档,创建索引库

    处理生成的Document对象(包括:设置分词器,索引库生成路径)

    将生成的多个Document对象写入这个配置类

  • 索引库作用:就是通过关键字搜索,和被索引的分词进行比较,从未快速找到Document(文档)

  • 主要代码

    ps:查询的Car类型的list集合中,每一个car只有一个String类型的carName属性

    /*
        * 根据数据库数据建立索引库
        * */
        public static void createIndexDataBase(List<Car> cars) throws IOException {
            //1、采集数据
            //2、创建Document对象
            ArrayList<Document> documents = new ArrayList<>();
            for (Car car : cars) {
                Document document = new Document();
                // Document文档中添加Field域
                // 汽车名称
                // Store.YES:表示存储到文档域中
                document.add(new TextField("carName", car.getBName(), Field.Store.YES));
                // 把Document放到list中
                documents.add(document);
    
                // 3. 创建Analyzer分词器,分析文档,对文档进行分词
    //            Analyzer analyzer = new StandardAnalyzer();
                IKAnalyzer analyzer = new IKAnalyzer();
                // 4. 创建Directory对象,声明索引库的位置
                Directory directory = FSDirectory.open(Paths.get("/root/matengfei/demo/database/car"));
                // 5. 创建IndexWriteConfig对象,写入索引需要的配置
                IndexWriterConfig config = new IndexWriterConfig(analyzer);
                // 6.创建IndexWriter写入对象
                IndexWriter indexWriter = new IndexWriter(directory, config);
                // 7.写入到索引库,通过IndexWriter添加文档对象document
                for (Document doc : documents) {
                    indexWriter.addDocument(doc);
                }
                // 8.释放资源
                indexWriter.close();
            }
        }
    
查询索引库,返回结果
  • 封装关键字

  • 执行搜索

  • 主要代码

    public static String parseKey(String keyWord) throws IOException, ParseException {
            // 1. 创建Query搜索对象
            // 创建分词器
    //        Analyzer analyzer = new StandardAnalyzer();
            IKAnalyzer analyzer = new IKAnalyzer();
            // 创建搜索解析器,第一个参数:默认Field域,第二个参数:分词器
            QueryParser queryParser = new QueryParser("carName", analyzer);
    
            // 创建搜索对象
            Query query = queryParser.parse(keyWord);
    
            // 2. 创建Directory流对象,声明索引库位置
            Directory directory = FSDirectory.open(Paths.get("/root/matengfei/demo/database/car"));
            // 3. 创建索引读取对象IndexReader
            IndexReader reader = DirectoryReader.open(directory);
            // 4. 创建索引搜索对象
            IndexSearcher searcher = new IndexSearcher(reader);
            // 5. 使用索引搜索对象,执行搜索,返回结果集TopDocs
            // 第一个参数:搜索对象,第二个参数:返回的数据条数,指定查询结果最顶部的n条数据返回
            TopDocs topDocs = searcher.search(query, 1);
            System.out.println("查询到的数据总条数是:" + topDocs.totalHits);
            // 获取查询结果集
            ScoreDoc[] docs = topDocs.scoreDocs;
            String result = null;
            // 6. 解析结果集
            for (ScoreDoc scoreDoc : docs) {
                // 获取文档
                int docID = scoreDoc.doc;
                Document doc = searcher.doc(docID);
                System.out.println("=============================");
                System.out.println("id:" + docID);
                System.out.println("carName:" + doc.get("carName"));
                result = doc.get("carName");
            }
            reader.close();
            return result;
        }
    

1.3、底层结构

Lucene底层是一个倒排索引,这个索引结构主要分为两部分:索引和文档,通过关键字查询时,比较关键字和索引,从而找到对应文档。

索引
  • 一行目录就是一个索引,在Lucene中一个索引是放在一个文件夹中的
  • 一个索引由多个段组成
文档
  • 文档是建立索引的基本单位,一个段中可以包含多篇文档
域(Field)
  • 一篇文档包含不同类型的信息,也就是不同的域,比如一篇文章的标题、时间、描述等
Lucene3.0之前(跳表)

了解Lucene(车辆名称映射Demo),lucene,全文检索,搜索引擎

跳表原理类似于二分查找,前提是建立跳表之前(多级链表)底层原始链表有序

Lucene3.0之后(FST原理)

2、Lucene相关度排序

后续会更新基于Lucene实现博客系统相同兴趣和领域方向的博主推荐!!!文章来源地址https://www.toymoban.com/news/detail-731881.html

到了这里,关于了解Lucene(车辆名称映射Demo)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot整合Lucene实现全文检索【详细步骤】【附源码】

    同样,本文的出现,也是我的个人网站笑小枫搭建的过程中产生的,作为一个技术博客为主的网站,Mysql的搜索已经满足不了我的野心了,于是,我便瞄上了全文检索。最初,是打算直接使用比较熟悉的ES,但是考虑到部署ES额外的服务器资源开销,最后选择了Lucene,搭配IK分

    2024年02月04日
    浏览(49)
  • 高性能的全文检索库Apache Lucene 介绍

            Apache Lucene 是一个高性能的全文检索库,由 Apache Software Foundation 维护。Lucene 提供了丰富的 API,用于实现快速、准确的全文搜索。本文将详细介绍 Apache Lucene 的技术特点、应用场景和优势。         Apache Lucene 的历史和发展         Apache Lucene 起源于 1999 年

    2024年03月27日
    浏览(53)
  • Java轻量级全文检索引擎Lucene使用及优化

    Lucene是一个开源的全文检索引擎工具包由Doug Cutting编写。它被设计用于实现全文搜索功能,即读入一堆文本文件并将其转换为易于搜索的数据结构。Lucene提供了一组简单而强大的API,使得索引和搜索过程变得非常方便。 Lucene广泛应用于从1200万站点中进行互联网搜索等搜索引

    2024年02月16日
    浏览(54)
  • C#,全文检索的原理与实现代码,No-Lucene

     文档管理系列技术文章 文档管理系统的核心技术与难点https://blog.csdn.net/beijinghorn/article/details/122426112PB级全文检索(分布式)解决方案——HyperSearchhttps://blog.csdn.net/beijinghorn/article/details/122377760  全文检索是文档管理系统的核心功能。  实现全文检索的途径其实很多,包括但

    2024年02月03日
    浏览(40)
  • Lucene(9):Lucene优化

    1 解决大量磁盘IO config.setMaxBufferedDocs(100000); 控制写入一个新的segment前内存中保存的document的数目,设置较大的数目可以加快建索引速度。         数值越大索引速度越快, 但是会消耗更多的内存   indexWriter.forceMerge(文档数量); 设置N个文档合并为一个段         数值越

    2024年02月09日
    浏览(31)
  • Lucene(8):Lucene底层储存结构

    1 详细理解lucene存储结构 存储结构 : 索引(Index) : 一个目录一个索引,在Lucene中一个索引是放在一个文件夹中的。 段(Segment) : 一个索引(逻辑索引)由多个段组成, 多个段可以合并, 以减少读取内容时候的磁盘IO。 Lucene中的数据写入会先写内存的一个Buffer,当Buffer内数据到一定

    2024年02月09日
    浏览(42)
  • Lucene(10):Lucene相关度排序

    1 什么是相关度排序 Lucene对查询和索引文档的相关度进行打分,得分高的就排在前边。 1.1 如何打分 Lucene是在用户进行检索时实时根据搜索的计算出来的,分两步: 计算出词(Term)的权重 根据词的权重值,计算文档相关度得分。 1.2 什么是词的权重 明确索引的

    2024年02月10日
    浏览(40)
  • ElasticSearch与Lucene是什么关系?Lucene又是什么?

    一. ElasticSearch 与 Lucene 的关系 Elasticsearch(ES)和Apache Lucene之间有密切的关系,可以总结如下: Elasticsearch构建于Lucene之上:Elasticsearch实际上是一个分布式的、实时的搜索和分析引擎,它构建在Apache Lucene搜索引擎库的基础上。Lucene提供了全文搜索和索引功能,而Elasticsearch在此

    2024年02月04日
    浏览(42)
  • Lucene轻量级搜索引擎,Solr 和 ElasticSearch 都是基于 Lucene 的封装

    1、Lucene 是什么 Lucene 是一个本地全文搜索引擎,Solr 和 ElasticSearch 都是基于 Lucene 的封装 Lucene 适合那种轻量级的全文搜索,我就是服务器资源不够,如果上 ES 的话会很占用服务器资源,所有就选择了 Lucene 搜索引擎 2、倒排索引原理 全文搜索的原理是使用了倒排索引,那么什么是倒

    2024年03月15日
    浏览(72)
  • Lucene入门及操作详解

    我们生活中的数据总体分为两种:结构化数据和非结构化数据。         结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等。         非结构化数据:指不定长或无固定格式的数据,如邮件,word 文档等磁盘上的文件 常见的结构化数据也就是 数据

    2024年02月11日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包