2017-12-12 Eric Wang
Lucene 事务 有过数据库经验的人都知道ACID特性,原子性(atomicity,或称不可分割性)、一致性(consistency)、隔离性(isolation,又称独立性)、持久性(durability)。由于隔离性的存在,对于新的变更包括添加、修改、删除,如果不进行 commit 的话,那么在读端是无法看到数据的变化的,在这里简单的介绍下 Lucene 中的事务,即ACID。 原子性 当你在一次 IndexWriter 的 session 中做操作(增加,删除文档),然后 commit,要么你的所有的操作修改都是可见的(commit 成功),要么所有的操作修改都不可见(commit 失败),绝不会处于某种中间状态。有些 继续阅读 »
2016-12-05 Eric Wang
 定义 在Lucene中基本的概念包括:index、document、field和term。一个index包含一个documents的序列 - 一个document是一个fields的序列 - 一个field是一个命名的terms序列 - 一个term是一个bytes的序列 在两个不同fields中的相同bytes序列被认为是不同的term。因此,term表示为一对:命名field的字符串,以及field内的bytes。  倒排索引 谈到倒排索引,那么首先看看正排是什么样子的呢?假设文档1包含【中文、英文、日文】,文档2包含【英文、日文、韩文】,文档3包含【韩文,中文】那么根据文档去查找内容的话 - 文档1->【中文、英文、 继续阅读 »
2017-06-28 Eric Wang
RAMDirectory和FSDirectory都继承自BaseDirectory,而BaseDirectory继承自Directory,Directory是Lucene中设计的一个顶层抽象类,可以将其看做本地文件系统的一个目录。 RAMDirectory是基于内存实现的,具有较高的存储速度,但是受到内存大小的限制,而FSDirectory是基于文件系统实现的,针对不同的操作系统有不同的具体实现类,这些实现类无需用户操心,只需要调用FSDirectory.open(Path path)方法,它就会帮助我们选择最适合的子类,FSDirectory的瓶颈在于磁盘I/O。 如果机器内存足够大的话,那么组合使用RAMDirectory和 继续阅读 »
2017-10-13 Eric Wang
背景 如果把这个标题拆分成两个来讲,那么每一个都很好解决,下文会进行详述,而如果把这两者看做是与条件并加上其它限制,则实现起来比较困难,本文就是要探讨在需求繁多的情况下,如何优雅地实现。比如需求如下 - 保留标点符号,否则去掉标点的话,在标点两边的词可能会匹配上,比如“你好,小甜甜”,去掉标点切分是『你|好|小|甜|甜』,那么『好小』有可能会命中,而如果切分成『你|好|,|小|甜|甜』,则『好小』无法命中 - 只要包含搜索词,要求对任意搜索词均可命中 - 比如“我爱你中国”,不同的分词工具会切分出不同的结果 - 『我|爱|你|中国』或者『我爱你|中国』或者『我|爱|你|中|国』等,那么要求搜索“我爱”或者“爱你”或者“你中 继续阅读 »
2016-06-24 Eric Wang
索引备份的几个关键问题 最简单的备份方式是关闭IndexWriter,然后逐一拷贝索引文件,但是如果索引比较大,那么这种备份操作会持续较长时间,而在备份期间,程序无法对索引文件进行修改,很多搜索程序是不能接受索引操作期间如此长时间停顿的 那么不关闭IndexWriter又如何呢?这样也不行,因为在拷贝索引期间,如果索引文件发生变化,会导致备份的索引文件损坏 另外一个问题就是如果原索引文件损坏的话,再备份它也毫无意义,所以一定要备份的是最后一次成功commit之后的索引文件 每次在备份之前,如果程序将要覆盖上一个备份,需要先删除备份中未出现在当前快照中的文件,因为这些文件已经不会被当前索引引用了;如果每次都更改备份路径的话,那么就直 继续阅读 »
2017-05-09 Eric Wang
Maven预设变量 使用过Maven的人应该都知道,我们在Maven项目中添加依赖的一般性做法。就是打开pom.xml文件,在节点下添加 xml org.apache.lucene lucene-core 5.5.0 包含坐标和版本号的内容,那么在Java类文件中,就可以引用Lucene包中的各种类了。但是要注意一点,这里面的版本号是以硬编码的形式存在,作为一个合格的软件开发者,要尽量在你的代码中避免硬编码的情况。为什么呢?比如我需要依赖其它的Lucene模块,那么pom.xml中添加内容如下: xml org.apache.lucene lucene-analyzers-commo 继续阅读 »
2016-03-21 Eric Wang
机器环境 Windows:Win7 64 bit Java:java version "1.8.0_45";Java HotSpot(TM) 64-Bit Server VM Solr:5.5 Lucene:5.5 Tomcat:8.0.32 Lucene和Solr下载地址:http://lucene.apache.org/ Windows选择下载zip压缩包,Linux选择下载tgz压缩包 Tomcat下载地址:http://tomcat.apache.org/ ,选择Binary Distributions下的Core中的64-bit Windows zip (pgp, md5, sha1)下载之后文件名称是:apache- 继续阅读 »
2019-05-10 Lanffy
前言 再Elasticsearch创建索引流程一文中,介绍了ES创建索引的流程。再流程中是调用Lucene的接口来创建索引的。本篇文章主要介绍ES中的索引——倒排索引 继续阅读 »