`
chencang
  • 浏览: 419515 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

lucene索引时analyzer的使用

阅读更多

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

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

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().

所以我们还可以写成这样:

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文相信大家都能看懂的,就不需要我来翻译了,我的英语很差,着急啊,呵呵。

 

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

Analyzer analyzer = new StandardAnalyzer();

 现在可以改用

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

然后如果需要特定域的分析器就调用addAnalyzer方法

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

 

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

import org.apache.lucene.analysis.PerFieldAnalyzerWrapper;

 就行了

分享到:
评论
2 楼 linleran 2008-08-28  
确实有用,对不同的域有时候需要不同的分析器。
1 楼 zhjt_88 2008-08-27  

相关推荐

    lucene-IKAnalyzer2012_u6-lukeall.rar

    lucene-IKAnalyzer2012_u6-lukeall.rar压缩包中包含lucene-4.10.3依赖包、中文分词器IKAnalyzer2012_u6的依赖包和索引库查看工具lukeall-4.10.0.jar(将jar拷贝到相应的索引库中双击打开即可查看)。解压后就可以...

    模糊查询-lucene-IKAnalyzer

    java1.5环境下创建修改删除增加模糊查询索引文件包 使用Lucene3.01+IKAnalyzer3.2 范例java文件,有兴趣的可以看看 欢迎指教

    Lucene Jsceg IkAnalyzer jar包

    使用Lucene 分词器Jsceg IkAnalyzer jar包 ucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了...

    lucene:基于lucene与IKAnalyzer的中文搜索demo及学习记录

    基于lucene与IKAnalyzer的中文搜索demo及学习记录 Lucene是apache下的一个开放源代码的全文检索引擎工具包。提供了完整的查询引擎和索引引擎,部分文本分析引擎。 Lucene的目的是为软件开发人员提供一个简单易用的...

    ik分词器2012和lucene的资源和jar包以及lucene索引查看工具

    ik分词器2012和lucene的资源和jar包以及lucene索引查看工具

    Apache Lucene全文检索和IKAnalyzer分词工具类

    说明:依赖jar包:lucene-core-2.3.2.jar、IKAnalyzer3.2.8.jar。 一、LuceneUtil 工具类代码: package com.zcm.lucene; import java.io.File; import java.io.IOException; import java.io.StringReader; import...

    lucene,lucene教程,lucene讲解

    Directory类代表一个Lucene索引的位置。它是一个抽象类. 其中的两个实现: 第一个是 FSDirectory,它表示一个存储在文件系统中的索引的位置。 第二个是 RAMDirectory,它表示一个存储在内存当中的索引的位置。 ...

    IKAnalyzer2012FF_u1.jar

    使用IK分词器,应为该集群使用到的solr版本为4.10.3-cdh5.7.5,所以使用的 IK 包为IKAnalyzer2012FF_u1.jar,如果是3x的solr,使用IKAnalyzer2012_u6.jar solr-4.10.3下载地址:...

    IKAnalyzer分词器 下载IKAnalyzer2012FF_u1.jar

    使用IK分词器,应为该集群使用到的solr版本为4.10.3-cdh5.7.5,所以使用的 IK 包为IKAnalyzer2012FF_u1.jar,如果是3x的solr,使用IKAnalyzer2012_u6.jar 具体操作如下: 引用 1.在/opt/cloudera/parcels/CDH/lib/...

    IKAnalyzer中文分词.rar

    IKAnalyzer继承Lucene的Analyzer抽象类,使用IKAnalyzer和Lucene自带的分析器方法一样,将Analyzer测试代码改为IKAnalyzer测试中文分词效果。 如果使用中文分词器ik-analyzer,就需要在索引和搜索程序中使用一致的...

    Lucene使用

    含建索引,内容检索(多种方式的检索),中文分词(IKAnalyzer、PaodingAnalyzer);Lucene采用3.03版,太新版和 ik paoding不兼容。 ----------------------------------------- 极易分词只支持1.9-2.4版,未测试 ...

    java Lucene初级教程

    lucene简介 1.1 什么是lucene  Lucene是一个全文搜索框架,而不是应用产品。因此它并不像www.baidu.com 或者google Desktop那么拿来就能用,它只是提供了一种工具让你能实现这些产品。 2 lucene的工作方式  lucene...

    IKAnalyzer3.2.8 源码

    IKAnalyzer3.2.8分词器 源码,用户lucene索引开发中

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

    开源全文搜索工具包Lucene2.9.1的使用。 1. 搭建Lucene的开发环境:在classpath中添加lucene-core-2.9.1.jar包 2. 全文搜索的两个工作: 建立索引文件,搜索索引. 3. Lucene的索引文件逻辑结构 1) 索引(Index)由...

    lucene2.9.1完整DEMO及开发文档

    Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_CURRENT); //创建一个语法分析器 IndexWriter iwriter = null; Directory directory = null; try { directory = FSDirectory.open(destDir); //...

    基于lucene的搜索引擎总结

    Lucene索引过程的核心类 IndexWriter :提供对索引的写入操作 Directory:描述了索引存放的位置 Analyzer:对文本进行分析,提取词汇(token),剔除无用的信息 Document:虚拟的文档 Field:每个Document包含一个或...

    Lucene的使用与优化

    Analyzer是分析器,它的作用是把一个字符串按某种规则划分成一个个词语,并去除其中的无效词语,这里说的无效词语是指英文中的“of”、“the”,中文中的“的”、“地”等词语,这些词语在文章中大量出现,但是本身...

    基于JAVA的搜索引擎 lucene-2.2.0

    对数据源分析,使用Lucene的分析器(Analyzer),根据分析器所得到的词条,构造一个索引器IndexWriter。索引器IndexWriter的功能主要就是创建索引,是建立索引工作中最核心的。 当构造完一个索引器IndexWriter之后,...

    apache lucene 4.10.0入门单元测试代码demo

    总结了一些实用的demo 包括: 1.建立索引 2.通过IKAnalyzer搜索中文关键词 3.复杂的多字段搜索 4.多线程并发搜索,通过contiperf测试,详见:...lucene支持多线程并发搜索和建索引,只要IndexWriter是单例模式即可

    最新Lucene教程

    4、index是最重要的包,用于向Lucene提供建立索引时各种操作的支持 5、queryParser提供检索时的分析支持 6、search负责检索 7、store提供对索引存储的支持 8、util提供一些常用工具类和常量类的支持 Ø Lucene...

Global site tag (gtag.js) - Google Analytics