在学校和老师一起做项目,在老师的推荐下深入学习了一些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) Java 4
ArtName Java 4

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

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

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

Term的作用是什么呢?

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

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

学习指南。

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

Lucene基础学习笔记的更多相关文章

  1. 【C#编程基础学习笔记】4---Convert类型转换

    2013/7/24 技术qq交流群:JavaDream:251572072  教程下载,在线交流:创梦IT社区:www.credream.com [C#编程基础学习笔记]4---Convert类型转换 ...

  2. 【C#编程基础学习笔记】6---变量的命名

    2013/7/24 技术qq交流群:JavaDream:251572072  教程下载,在线交流:创梦IT社区:www.credream.com [C#编程基础学习笔记]6---变量的命名 ----- ...

  3. 1.C#基础学习笔记3---C#字符串(转义符和内存存储无关)

    技术qq交流群:JavaDream:251572072  教程下载,在线交流:创梦IT社区:www.credream.com ------------------------------------- ...

  4. Java基础学习笔记总结

    Java基础学习笔记一 Java介绍 Java基础学习笔记二 Java基础语法之变量.数据类型 Java基础学习笔记三 Java基础语法之流程控制语句.循环 Java基础学习笔记四 Java基础语法之 ...

  5. Mysql数据库基础学习笔记

    Mysql数据库基础学习笔记 1.mysql查看当前登录的账户名以及数据库 一.单表查询 1.创建数据库yuzly,创建表fruits 创建表 ) ) ,) NOT NULL,PRIMARY KEY( ...

  6. 0003.5-20180422-自动化第四章-python基础学习笔记--脚本

    0003.5-20180422-自动化第四章-python基础学习笔记--脚本 1-shopping """ v = [ {"name": " ...

  7. Java基础学习笔记(一)

    Java基础学习笔记(一) Hello World 基础代码学习 代码编写基础结构 class :类,一个类即一个java代码,形成一个class文件,写于每个代码的前端(注意无大写字母) XxxYy ...

  8. C#RabbitMQ基础学习笔记

    RabbitMQ基础学习笔记(C#代码示例) 一.定义: MQ是MessageQueue,消息队列的简称(是流行的开源消息队列系统,利用erlang语言开发).MQ是一种应用程序对应用程序的通信方法. ...

  9. handlebars.js基础学习笔记

    最近在帮学校做个课程网站,就有人推荐用jquery+ajax+handlebars做网站前端,刚接触发现挺高大上的,于是就把一些基础学习笔记记录下来啦. 1.引用文件: jquery.js文件下载:h ...

随机推荐

  1. idea 设置字体

    1.设置 ui字体 修改编辑器的字体(也就是代码的字体):设置-Editor-Color&Font,默认的scheme是不可以更改的,你需要save as,建立一个新的(名字可以随意写个,My ...

  2. hdu1598

    思路:对所有路径的速度从小到大排个序,然后枚举高度差就ok...... #include<iostream> #include<cstdio> #include<cstr ...

  3. vue前后分离动态路由和权限管理方案

    需求 需要根据不同的角色来显示不同的菜单 问题 系统是前后分离模式开发的,出现了后端接口和前端路由都需要权限管理. 思路 后端的接口肯定得验证权限 在前端做好组件名和组件的映射 前端的路由通过后端发回 ...

  4. thinkphp验证码乱码的解决办法

    很有可能是入口文件index.php和.htaccess文件要转换成 以UTF-8无BOM格式编码

  5. keras系列︱迁移学习:利用InceptionV3进行fine-tuning及预测、完美案例(五)

    引自:http://blog.csdn.net/sinat_26917383/article/details/72982230 之前在博客<keras系列︱图像多分类训练与利用bottlenec ...

  6. HTML(四):行级标签和块级标签

    一.行级标签 行级标签又称为内联标签,行级标签不会单独占据一行,设置宽高无效,行内内部可以容纳其他行内元素,但不可以容纳块元素,不然会出现无法预知的效果. 常见行级标签: span.strong.em ...

  7. 轻量级ORM框架Dapper应用八:使用Dapper实现DTO

    一.什么是DTO 先来看看百度百科的解释: 数据传输对象(DTO)(Data Transfer Object),是一种设计模式之间传输数据的软件应用系统.数据传输目标往往是数据访问对象从数据库中检索数 ...

  8. Ubuntu free以及Linux内存占用大的解释

    -bash-3.00$ free total used free shared buffers cached Mem: 514020 465932 48088 0 15864 348844 -/ bu ...

  9. linux 木马清理过程

    服务器出现异常,完全无法访问,ssh登陆都极其缓慢 解决过程 top 查看系统状态,发现 load average 平均负载值非常高,再看排名第一的进程,是一个不认识的进程名:minerd 感觉是被入 ...

  10. React Native安卓项目打包发布APK步骤

    1.产生签名的key 该过程会用到keytool,开发过安卓的都应该接触过该东西.详细请见密钥和证书管理工具.在项目的主目录(不是android文件夹)中执行: --生成签名key,注意记下你的密钥和 ...