`

Lucene为不同字段指定不同分词器(转)

阅读更多
在lucene使用过程中,如果要对同一IndexWriter中不同 Document,不同Field中使用不同的analyzer,我们该如何实现呢?

通过对《lucene in action》的阅读,发现是可以解决这一问题的。lucene可以正对整个IndexWriter对象或者每一个document对象或者特定 Field使用不同的分析器。
Java代码 复制代码

    Analyzer analyzer = new StandardAnalyzer();  
     
    IndexWriter writer = new IndexWriter(direcotry, analyzer, true); //  
     
    Document doc = new Document();  
     
    doc.add(new Field("title", "this is title", Field.Store.COMPRESS,Field.Index.TOKENIZED,Field.TermVector.WITH_POSITIONS_OFFSETS));  
     
    doc.add(new Field("content", "this is content", Field.Store.COMPRESS,Field.Index.TOKENIZED,Field.TermVector.WITH_POSITIONS_OFFSETS));  
     
    writer.addDocument(doc); //这是大部分情况下使用的一个方法 

其实还有另外一个方法,原型如下:
lucene自带文档 写道
addDocument(Document doc, Analyzer analyzer)
Adds a document to this index, using the provided analyzer instead of the value of getAnalyzer().

所以我们还可以写成这样:
Java代码 复制代码

    writer.addDocument(doc, analyzer);  
    // 这里的analyzer是指另外一个你指定的analyzer,不同于上面的StandardAnalyzer 

 

那 么如何针对特定Field使用不同分析器呢,lucene包里面有个PerFieldAnalyzerWrapper类,解决了这一问题,这是 lucene的文档里面的一段话:
lucene自带文档 写道
Example usage:

PerFieldAnalyzerWrapper aWrapper = new PerFieldAnalyzerWrapper(new StandardAnalyzer());
aWrapper.addAnalyzer("firstname", new KeywordAnalyzer());
aWrapper.addAnalyzer("lastname", new KeywordAnalyzer());

In this example, StandardAnalyzer will be used for all fields except "firstname" and "lastname", for which KeywordAnalyzer will be used.

A PerFieldAnalyzerWrapper can be used like any other analyzer, for both indexing and query parsing.

PreFieldAnalyzerWrapper类的构造函数中需要一个默认的分析器作为参数。为了给不同的Field指定不同的 analyzer,就需要调用该类的addAnalyzer()方法。上面的E文相信大家都能看懂的,就不需要我来翻译了,我的英语很差,着急啊,呵呵。

也就是说大家以前初始化分析器的时候用这一句:
Java代码 复制代码

    Analyzer analyzer = new StandardAnalyzer(); 

现在可以改用
Java代码 复制代码

    PerFieldAnalyzerWrapper analyzer = new PerFieldAnalyzerWrapper(new StandardAnalyzer()); 

然 后如果需要特定域的分析器就调用addAnalyzer方法
Java代码 复制代码

    analyzer.addAnalyzer("fieldname", new KeywordAnalyzer()); 

对了,最后说一下,PerFieldAnalyzerWrapper类也是在org.apache.lucene.analysis包下面的,只需要
Java代码 复制代码

    import org.apache.lucene.analysis.PerFieldAnalyzerWrapper; 

就行了

转:http://hi.baidu.com/lewutian/blog/item/42bf84ceeef3ba35b600c8e7.html





搜索引擎和网络爬虫技术群293961767欢迎志同道合的朋友加入!
分享到:
评论

相关推荐

    lucene.net+盘古分词多条件全文检索并匹配度排序

    lucene.net的版本为2.9.2 盘古分词的版本为2.3.1 并实现了高亮功能。高亮上使用的是盘古分词的高亮算法。 有点小bug,在这个字段没有关键字的时候可能会不显示数据, 如果要是只看全文检索,可以自己去掉高亮,看...

    如何使用Lucene的中文分词搜索

    NULL 博文链接:https://gznofeng.iteye.com/blog/1129902

    基于lucene和jieba分词的文档查重工具类

    基于lucene和jieba的查重工具类,自行扩展字段级停止词库

    lucene2.9.1所有最新开发包及源码及文档

    C) 第三方的中文分词器:如PaodingAnalyzer、IKAnalyzer 4) IndexWriter.MaxFieldLength: 指定域值的最大长度。 a) UNLIMITED 无限制的。 b) LIMITED 有限制的。值为10000 5) Document: 索引的组成单元. 一...

    solr6对应的IKAnalyzer分词器

    3. 添加一个中文分词的字段类型(filedType):在solr中,字段类型(fieldType)相当于数据库中的字段类型(`int`、`varchar`...),在`server/solr/RD-Product/conf/managed-schema`中配置如下内容 <!--中文分词器IK ...

    中文分词器工具包下载(配置+Jar包)

    IK配置+两个Jar包,实现与Solr 7.2.1版本的对接,对中文语句进行分词处理,可自行扩展词库字段ext.dict以及停止词字典dict

    Lucene建立索引及查询包含“java”关键字 示例代码

    根据博客调试的程序,比较简单,英文分词和检索,希望对大家学习有帮助。

    Lucene 3.6.1完整案例

    Lucene 3.6.1: 中文分词、创建索引库、排序、多字段分页查询以及高亮显示源 希望对大家有帮助, 我自己建立的mysql数据库 使用了IKAnalyzer分词器源代码,大家可以自己设置停词,也可以自己改写算法

    LuceneNet和盘古分词做的搜索引擎asp.net

    LuceneNet和盘古分词做的搜索引擎asp.net,将数据库字段生成到索引文件,可检索、高亮、速度超快。学习、项目的好东东,懂的下。

    【分享:lucene学习资料】---<下载不扣分,回帖加1分,欢迎下载,童叟无欺>

    1&gt; lucene学习笔记 2&gt; 全文检索的实现机制 【1】lucene学习笔记的目录如下 1. 概述 3 2. lucene 的包结构 3 3. 索引文件格式 3 4. lucene中主要的类 4 4.1. Document文档类 4 4.1.1. 常用方法 4 4.1.2. 示例 4 4.2...

    最新Lucene教程

    1、analysis对需要建立索引的文本进行分词、过滤等操作 2、standard是标准分析器 3、document提供对Document和Field的各种操作的支持。 4、index是最重要的包,用于向Lucene提供建立索引时各种操作的支持 5、...

    浅谈MySQL和Lucene索引的对比分析

    MySQL和Lucene都可以对数据构建索引并通过索引查询数据,一个是关系型数据库,一个是构建搜索引擎(Solr、ElasticSearch)的核心类库。两者的索引(index)有什么区别呢?以前写过一篇《Solr与MySQL查询性能对比》,...

    Lucene全文检索(一)

    * 分析文档(每个文档拆分成不同的域,再把每个域进行分词) 构建Trem对象 每个关键词都封装成一个Term对象中(Term中包含两部分内容:关键词所在的域(字段名)、关键词本身(字段值) 把Trem根据空格进行字符串...

    概念原理.md

    elasticsearch 简单介绍 在分布式系统中,单机无法存储规模巨大的数据,水平扩容增加...每个字段的值由若干词(Term)组成,Term 是原文本内容经过分词器处理和语言处理后的最终结果(例如,去除标点符号和转换为词根)

    基于Heritrix与Lucene的垂直搜索引擎研究

    垂直搜索是针对某一个行业的专业搜索引擎,...向分字段抽取出需要的数据进行处理后再以某种形式返回给用户。该文结合使用Heritrix与Lucene对学校新闻网站网页进行抓取 并建立索引,建立相对应的新闻垂直搜索引擎系统。

    【信息检索课程设计】sdu新闻网站全站爬取+索引构建+搜索引擎

    索引构建 对上一步爬取到的网页进行结构化预处理,包括基于模板的信息抽取、分字段解析、分词、构建索引等。 检索排序 对上一步构建的索引库进行查询,对于给定的查询,给出检索结果,明白排序的原理及方法。 详细...

    Elasticsearch 技术解析与实战.zip

    290 6.5.3 分片智能分配 291 6.5.4 分片配置过滤 292 6.5.5 其他集群配置 293 6.6 小结 293 第7章 索引分词器 294 7.1 分词器的概念 294 7.2 中文分词器 298 7.3 插件 300 7.3.1 插件管理 301 7.3.2 插件安装 301 ...

    淘特站内搜索引擎(C#版)

    淘特站内搜索引擎是由淘特JSP搜索引擎发展而来,系统基于Lucene.Net核心,通过高效的中文分词算法将数据库中内容进行分析、索引并保存至硬盘中。前台搜索时,通过读取索引文件查询,避免了传统数据库查询在高并发及...

Global site tag (gtag.js) - Google Analytics