b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

lucene原理_lucene solor_Lucene:基于Java的全文检索引擎简介 (笔记 by 车东(3)

电脑杂谈  发布时间:2016-06-07 14:01:08  来源:网络整理

另外一个解决的办法是采用自动切分算法:将单词按照2元语法(bigram)方式切分出来,比如:
"北京" ==> "北京 京天 天安 安门"。

这样,在查询的时候,无论是查询"北京" 还是查询"",将查询词组按同样的规则进行切分:"北京","天安安门",多个关键词之间按与"and"的关系组合,同样能够正确地映射到相应的索引中。这种方式对于其他亚洲语言:韩文,日文都是通用的。

基于自动切分的最大优点是没有词表维护成本,实现简单,缺点是索引效率低,但对于中小型应用来说,基于2元语法的切分还是够用的。基于2元切分后的索引一般大小和源文件差不多,而对于英文,索引文件一般只有原文件的30%-40%不同,


自动切分 词表切分

实现 实现非常简单 实现复杂

查询 增加了查询分析的复杂程度, 适于实现比较复杂的查询语法规则

存储效率 索引冗余大,索引几乎和原文一样大 索引效率高,为原文大小的30%左右

维护成本 无词表维护成本 词表维护成本非常高:中日韩等语言需要分别维护。
还需要包括词频统计等内容

适用领域 嵌入式系统:运行环境资源有限
分布式系统:无词表同步问题
多语言环境:无词表维护成本 对查询和存储效率要求高的搜索引擎

目前比较大的搜索引擎的语言分析算法一般是基于以上2个机制的结合。关于中文的语言分析算法,大家可以在Google查关键词"wordsegment search"能找到更多相关的资料,。

安装和使用

下载:

注意:lucene中的一些比较复杂的词法分析是用JavaCC生成的(JavaCC:JavaCompilerCompiler,纯Java的词法分析),所以如果从源代码编译或需要修改其中的QueryParser、定制自己的词法分析器,还需要从https://javacc.dev.java.net/下载javacc。

lucene的组成结构:对于外部应用来说索引模块(index)和检索模块(search)是主要的外部应用入口

org.apache.lucene.search/ 搜索入口

org.apache.lucene.index/ 索引入口

org.apache.lucene.analysis/ 语言分析器

org.apache.lucene.queryParser/ 查询分析器

org.apache.lucene.document/ 存储结构

org.apache.lucene.store/ 底层IO/存储结构

org.apache.lucene.util/ 一些公用的数据结构

简单的例子演示一下lucene的使用方法:

索引过程:从命令行读取文件名(多个),将文件分路径(path字段)和内容(body字段)2个字段进行存储,并对内容进行全文索引:索引的单位是Document对象,每个Document对象包含多个字段Field对象,针对不同的字段属性和数据输出的需求,对字段还可以选择不同的索引/存储字段规则,列表如下:

方法 切词 索引 存储 用途

Field.Text(String name, String value) Yes Yes Yes 切分词索引并存储,比如:标题,内容字段

Field.Text(String name, Reader value) Yes Yes No 切分词索引不存储,比如:META信息,
不用于返回显示,但需要进行检索内容

Field.Keyword(String name, String value) No Yes Yes 不切分索引并存储,比如:日期字段

Field.UnIndexed(String name, String value) No No Yes 不索引,只存储,比如:文件路径

Field.UnStored(String name, String value) Yes Yes No 只全文索引,不存储

public class IndexFiles {
//使用方法:: IndexFiles [索引输出目录] [索引的文件列表] ...
public static void main(String[] args) throws Exception {
String indexPath = args[0];
IndexWriter writer;
//用指定的语言分析器构造一个新的写索引器(第3个参数表示是否为追加索引)
writer = new IndexWriter(indexPath, new SimpleAnalyzer(), false);
for (int i=1; i

以上就是关于lucene的全部内容,相信你一定会非常满意。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shenmilingyu/article-8070-3.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 深渊传说
      深渊传说

      难道真的就这样被践踏吗

    • 罗蓉春
      罗蓉春

      也许美帝就是来溜一圈立马就滚出12海里

    热点图片
    拼命载入中...