关于自己从0开始学习Lucene的学习记录(1)

     一,概念上的东西。源自 https://www.ibm.com/developerworks/cn/java/j-lo-lucene1/
  简单的总结,就是把需要检索的内容(即目标文档)转化成为文本格式。使用Lucene进行索引,把这个索引存储起来。使用者,在进行全文检索的时候,就是使用这个索引去检索所需要的文档。其好处就是 快。
     二,实际的操作。
     查找了,网上许多的内容后发现,Lucene的版本不同,有部分内容变更了,至于当前的版本和以前的版本有什么不同,留待以后去慢慢看,这里以当前版本的来操作(当前的时间的2018年5月7号)。
           在Apache官网上下载。下载流程如下
     下载zip文件之后,我们在解压之后的文件中打开该地址的index.html   地址为 .../lucene-7.3.0/docs/demo/index.html
在这个index.html中说的很清楚。

自己的渣翻
关于这个文件  
这个文件打算作为一个使用和运行Lucene示例的指南,这个文档将带你了解一些基本的安装和配置。
关于这个Demo
Lucene的命令行示例代码包含一个应用,这个应用展示了Lucene的许多功能,并且展示教你如何把Lucene添加到你的应用中。
设置你的 class路径
首先,米应该下载最新的Lucene的版本,然后把这个文件(就是zip文件)解压到目录下。
你需要需要四个jar包  the Lucene JAR, the queryparser JAR, the common analysis JAR, and the Lucenedemo JAR.
然后就是这四个jar包的位置   
the Lucene  JAR  的位置是  \lucene-7.3.0\lucene-7.3.0\core  中的 jar包  (路径下就一个jar)
the queryparser JAR 的位置是  \lucene-7.3.0\queryparser  中的jar包 (路径下就一个jar)
the common analysis JAR 的位置是  \lucene-7.3.0\analysis\common
the Lucene demo JAR 的位置是  \lucene-7.3.0\lucene-7.3.0\demo

把这4个jar包放在 java的classpath的路径下。(在环境变量中,classpath下,把这4个jar包添进去)


索引文件
一旦你已经走了这么远,你应该渴望继续下去(调侃的一句)。建立一个索引。
确保你已经正确地设置了classpath。就像:
java org.apache.lucene.demo.IndexFiles -docs {path-to-lucene} {path-to-lucene} 就是你想建立索引的目录
这里我把 这个Lucene的地址填进去了,如下图所示:

这样,zip中解压的所有的文件都在索引中了

这将产生一个名为index的子目录,它将包含所有Lucene源代码的索引。
搜索索引类型:
(在cmd中继续输入)
java org.apache.lucene.demo.SearchFiles 如下图所示   

(会弹出 Enter query)
你将会被提示要求输入 query。(这里后面输入的内容,就是你想要查询的 关键字)输入一串莫名其妙的词,或者子集编造的词语
比如  superca lifragilisticexpialidocious,那么你将不会再Lucene 源代码中匹配到结果。现在尝试输入单词"string" .Lucene将会返回
一堆文件。结果将会以每页10个结果的形式来显示,并且想你询问是否需要更多的结果。

(先 输入string的结果如下图所示,这里我觉得是 含有string 这个单词的所有的文档都在这里。)


关于代码
在这部分,我们将遍历命令行Lucene演示的来源: 到哪里找到它们,它们的部分和它们的功能。这部分是为了那些想要理解如何
在他们的apps中如何使用Lucene的java开发者而设计的。
源代码的位置
这里讨论的文件直接链接到文档中:
IndexFiles.java: code to create a Lucene index.     IndexFiles.java : 创建Lucene索引的代码   
SearchFiles.java: code to search a Lucene index.    SearchFiles.java : 查找Lucene索引的代码
(关于源代码的解读,另开篇幅解读)



索引文件
正如我们在前面讨论过的,IndexFiles类创建了一个Lucene索引,让我来看看它是如何做到的。
main()函数解析命令行参数,然后准备在实例化索引写入器时,打开一个目录,并且实例化  StandardAnalyzer IndexWriterConfig .
-index   这个命令行的参数的值是文件系统目录的名字,这个文件系统(filesystem directory)里存放的是所有的索引信息。
如果IndexFiles用-index命令行参数中的相对路径调用,或者没有给出命令行参数,从而默认的相关路径"index"将会被使用,
这个index path(索引路径)将会被作为当前的工作目录的子目录被创建出来(虽然这个子目录实际上是不存在的),在某些平台上
索引路径会在不同的目录下呗创建出来(比如,用户的主目录)

[ 这个就是说明,这个索引目录实际上是看不见的,是个虚拟存在]


-docs 这个命令行参数的值是那个被索引的文件的目录的位置。     [目录的位置,这个目录中包含被索引的文件]
-update 这个命令行参数是告诉IndexFiles如果索引已经存在,就不要删除索引。当-update没有被给出,在索引任何文档之前
IndexFiles会清楚之前的操作。

Lucene的目录们会被IndexWriter (索引写入器)使用,在索引中存储信息。除了我们正在使用的 FSDirectory的实现之外,
还有几种其他的 Directory的子类可以写入内存、写入数据库等等。

Lucene Analyzers(分析器)正在处理管道,这个管道是把文本分解成为带索引的token。也就是术语。也可以随意地在这些
token上做出其他的操作,比如小写转换,同义词插入,过滤掉不想要的记号(tokens)等等。我们正在使用的这个分析器是标准分析器,这个分析器使用Unicode文本分割算法中的Word Break(单词分割)规则;该算法在Unicode标准附件#29中指定。
该分析器把token转化成为小写的,然后过滤掉stopwords。stopwords是常用语言单词,比如字母( "a" , "an" , "the" 等等) 
和其他的没有搜索价值的tokens。值得注意的是,每一种语言都有不同的规则,对于每一种语言,你都应该使用合适的分析器。
Lucene目前提供一些语言的分析器,在 lucene/analysis/common/src/java/org/apache/lucene/analysis 处可以参看文档。

IndexWriterConfig实例持有所有的Indexwriter的配置。例如,我们将OpenMode设置为基于-update命令行参数的值。

往下看文件,在IndexWriter实例化之后,你应该看 indexDocs() 这个函数的代码,这个递归函数会抓取目录并且创建文档对象。这个文档是一个简单的数据对象,来表示文件中的文本内容以及它的创建时间和位置。这些实例将会被加入到IndexWriter中去,如果
-update这个命令行的参数被给予了,IndexWriterConfig OpenMode将会被设置成为 OpenMode.CREATE_OR_APPEND而不是向索引中添加文档,
IndexWriter将在索引中更新它们,试图找到具有相同标识符的已经索引的文档(在我们的示例中,文件路径充当标识符);如果存在,则从索引中删除它;然后将新文档添加到索引中。


Searching Files
Searching Files这个类非常的简单,它主要与 IndexSearcher,StandardAnalyzer(这个标准分析器同样在IndexFiles类中被使用)和
QueryParser一起合作。查询解析器是用一个分析器构造的,该分析器用于以与解释文档相同的方式解释查询文本:查找单词的
范围,小写转换,去除无用单词,比如 "a" "an" "the"。查询的对象包含从QueryPaser(查询分析器)中的来的结果,这个结果是
要被传递给搜索器的。注意,在不适用查询器的时候,也可能以编程的方式构造出一个丰富的查询对象。查询器只是使Lucene
查询语法与查询对象相一致。

SearchFiles使用 IndexSearcher.search(query,n) 方法返回带有max n次点击的TopDocs,结果用分页打印出来,按分数排序。




以上是大致的翻译和我自己的理解,对于IndexFiles.java 和 SearchFiles.java 需要结合源码阅读。对这两个文件,另开篇幅阅读。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值