热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Lucene基础学习笔记

在学校和老师一起做项目,在老师的推荐下深入学习了一些SqlServer的知识,看一些书下来哎也没记住多少,不过带来了新疑问。不使用模糊查询

在学校和老师一起做项目,在老师的推荐下深入学习了一些SqlServer的知识,看一些书下来哎也没记住多少,不过带来了新疑问。

不使用模糊查询,我应该用什么呢?如何能不影响数据库性能,还能做模糊查询呢?所以开始对Lucene有一些简单的学习。

先举一个未必恰当的例子:

假如有一天你犯罪了,警察如何找到你呢?肯定不应该是挨家挨户的搜索你吧。

警察可能先通过户籍信息和一些档案,查询到你的住址,学校,单位,去这些地方找。如果还找不到呢? 

再找你常交往的朋友,得到一些你经常去的地方,再次索引到一些地点。

总之,雁过留痕,总能通过蛛丝马迹的信息,索引到你可能在的地方。这就是在浩瀚的数据搜索中,索引,缩小范围的重要性。

Lucene是一款全文搜索引擎,它帮我们将非结构化的数据,以结构化的形式分析并存储,以便于我们能类似于数据库结构化的搜索获取到我们想要的数据。

既然要通过Lucene来搜索,那就要将数据,以Lucene搜索引擎认识的方式存储。这个存储的过程,称之为索引(动词),帮我们做这个动作的是索引引擎,帮我们查询的是查询引擎。另外文本分析引擎应该参与了查询和索引的两个动作。

Lucene以文档的形式存储,每一个文档都有唯一标识Id。一个文档基本由多个域组成, 域由域名称FieldName和域的值Value组成。

比如我们站内搜索,搜索目标是所有文章。可以将文章标题作为一个field,则其fieldName为“ArtName”字符串,其value值,为ArtName在数据库中的值。

所以文章内容,文章作者,文章发布时间,文章阅读数,文章标签等都可以放到同一个文档中的不同域。

当我们索引上述提到的字段时,不仅在我们参数指定下,设置是否存储,是否允许索引搜索。Lucene中最重要的,是其分词器将会提取词语,建立词语索引和文档id的关联。只拿文章标题来说,其他的均可类比,比如四篇文章标题,

1.佳木斯大学简介      文档Id被索引为Id1

2.计算机科学与技术专业简介       Id2

3.Java学习指南         Id3

4..Net学习指南          Id4

列举几个典型的分词索引:

 

ArtName学习3,4
ArtName指南3,4
ArtName学习指南3,4
ArtName简介1,2
ArtName大学1
ArtContent     (乱入一个内容Field)Java4
ArtNameJava4

想象一下,如果我们不建立这样的索引,搜索带Java的内容,那么一定要去遍历每一片文章。以上的索引存储过程,称为倒排索引,意味着,先分析所需存储数据的内容,并按照结构来索引存储。等到我们查询的时候,就不用每一条数据去遍历了。

上面这种分词,源于强大的分词器,Lucene本身不提供中文分词器,可以使用第三方开源的,社区中比较游优秀的,应该就是IK了,其可拓展性也是比较强的,我们可以通过在配置文件中配置新的词汇,比如“逗比”这个词,在分词器开发的时候,没有这个词,在索引的时候,则会分开索引,我们也可以很容易在配置文件中加以配置。

从中得到另一个概念:其中每一个词语,我们应称之为Term。重要的是 我们看到其中乱入的ArtContent,由于域的名称和最后一条数据不同,虽然他们的词语都是Java,但是这属于两条Term。

Term的作用是什么呢?

可以帮助我们构建查询,也就是构建一个Term,这个查询可以指定Field的Name为ArtName,Field的Value为Java。 这也就是说查询文章标题,域值为Java的数据。而不是指定文章内容域。

我们也可以构造搜索Query对象,查询Java学习指南,这样的搜索,我们需要规定,标题中一定要带Java,标题中一定要有学习,一定要有指南。这样我们搜索到的是Java学习指南而不是.Net

学习指南。

本篇记录下Luence的一些基础概念和意义。明白了这些,我想,看文档写代码应该不是困难所在。

 



推荐阅读
  • datetime 索引_【免费毕设】ASP.NET基于Ajax+Lucene构建搜索引擎的设计和实现(源代码+论文)...
    点击上方“蓝字”关注我们目录系统设计4.1搜索引擎模型模型包括爬虫、索引生成、查询以及系统配置部分。爬虫包括:网页抓取模块、网页减肥模块、爬虫维持模块。索引生成包括& ... [详细]
  • camel_使用Camel在来自不同来源的Solr中索引数据
    camelApacheSolr是建立在Lucene之上的“流行的,快速的开源企业搜索平台”。为了进行搜索(并查找结果),通常需要从不同的源(例如内容管理 ... [详细]
  • 帝国cms各数据表有什么用
    CMS教程|帝国CMS帝国cmsCMS教程-帝国CMS精易编程助手源码,ubuntu桥接设置,500错误是tomcat吗,爬虫c原理,php会话包括什么,营销seo关键词优化一般多 ... [详细]
  • 本文介绍了多种Eclipse插件,包括XML Schema Infoset Model (XSD)、Graphical Editing Framework (GEF)、Eclipse Modeling Framework (EMF)等,涵盖了从Web开发到图形界面编辑的多个方面。 ... [详细]
  • 本文介绍了基于Java的在线办公工作流系统的毕业设计方案,涵盖了MyBatis框架的应用、源代码分析、调试与部署流程、数据库设计以及相关论文撰写指导。 ... [详细]
  • MyBatis入门指南:环境搭建与基础配置详解
    本文详细介绍了MyBatis的基础配置流程,包括在Maven项目中添加MyBatis依赖、IDEA中配置数据库连接、导入SQL脚本以及编写mybatis-config.xml配置文件等关键步骤。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • SQLite是一种轻量级的关系型数据库管理系统,尽管体积小巧,却能支持高达2TB的数据库容量,每个数据库以单个文件形式存储。本文将详细介绍SQLite在Android开发中的应用,包括其数据存储机制、事务处理方式及数据类型的动态特性。 ... [详细]
  • 深入浅出:Hadoop架构详解
    Hadoop作为大数据处理的核心技术,包含了一系列组件如HDFS(分布式文件系统)、YARN(资源管理框架)和MapReduce(并行计算模型)。本文将通过实例解析Hadoop的工作原理及其优势。 ... [详细]
  • 对于初次购买阿里云服务器的新手用户来说,如何高效地利用服务器资源并成功部署网站是一个重要的课题。本文将详细指导您完成从购买服务器到网站上线的六个关键步骤。 ... [详细]
  • 本文详细解析了Java中流的概念,特别是OutputStream和InputStream的区别,并通过实际案例介绍了如何实现Java对象的序列化。文章不仅解释了流的基本概念,还探讨了序列化的重要性和具体实现步骤。 ... [详细]
  • 深入解析轻量级数据库 SQL Server Express LocalDB
    本文详细介绍了 SQL Server Express LocalDB,这是一种轻量级的本地 T-SQL 数据库解决方案,特别适合开发环境使用。文章还探讨了 LocalDB 与其他轻量级数据库的对比,并提供了安装和连接 LocalDB 的步骤。 ... [详细]
  • SQL 数据恢复技巧:利用快照实现高效恢复
    本文详细介绍了如何在 SQL 中通过数据库快照实现数据恢复,包括快照的创建、使用及恢复过程,旨在帮助读者深入了解这一技术并有效应用于实际场景。 ... [详细]
  • 本文详细介绍了如何处理Oracle数据库中的ORA-00227错误,即控制文件中检测到损坏块的问题,并提供了具体的解决方案。 ... [详细]
  • 本文探讨了在SharePoint环境中使用BDC(Business Data Catalog)时遇到的问题及其解决策略,包括XML文件导入SSP后的不可见性问题以及与远程SQL Server 2005连接的难题。 ... [详细]
author-avatar
mobiledu2502907897
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有