在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

转载于:https://blog.51cto.com/daheyuan/1133216

Lucene为不同字段指定不同分词器(转)相关推荐

  1. Lucene.net(4.8.0)+PanGu分词器 问题记录一 分词器Analyzer的构造和内部成员ReuseStategy

    前言:目前自己在做使用Lucene.net和PanGu分词实现全文检索的工作,不过自己是把别人做好的项目进行迁移.因为项目整体要迁移到ASP.NET Core 2.0版本,而Lucene使用的版本是3 ...

  2. ik分词和jieba分词哪个好_Lucene.net(4.8.0) 学习问题记录五: JIEba分词和Lucene的结合,以及对分词器的思考...

    前言:目前自己在做使用Lucene.net和PanGu分词实现全文检索的工作,不过自己是把别人做好的项目进行迁移.因为项目整体要迁移到ASP.NET Core 2.0版本,而Lucene使用的版本是3 ...

  3. 3.ElasticSearch分词器,包括默认分词器、英文分词器、中文分词器

    注:测试环境:CentOS Linux release 7.6.1810 (Core)  jdk:1.8 elasticsearch:6.8.2 单节点 es       安装:https://blo ...

  4. Lucene分词器,使用中文分词器,扩展词库,停用词

    2019独角兽企业重金招聘Python工程师标准>>> Lucene分词器,使用中文分词器,扩展词库,停用词 博客分类: 搜索引擎,爬虫 停止词:lucene的停止词是无功能意义的词 ...

  5. java lucene 分词器_中文分词器—IKAnalyzer

    对于lucene自带分词器,没有一个能很好的处理中文的分词,因此,我们使用的分词的时候,往往会使用国人开发的一个分词器IKAnalyzer,使用非常简单,只需要将jar包拷入即可. 如果需要扩展词库或 ...

  6. 玩转ES,一文教你掌握IK中文分词器

    前言 ES默认的分词器对中文分词并不友好,所以我们一般会安装中文分词插件,以便能更好的支持中文分词检索. 而ES的中文分词器中,最流行的必然是IK分词器. 一.IK分词器介绍 IK分词器在是一款基于词 ...

  7. Elasticsearch 入门 核心概念 数据结构 分词器 javaAPI

    ElasticSearch 1-今日内容 2-初识ElasticSearch 2.1-基于数据库查询的问题 2.2-倒排索引 2.2.1 评分TF/IDF/BM25计算 2.3-ES存储和查询的原理 ...

  8. elasticsearch中分词器edge_ngram和ngram的区别

    参考:https://www.phpmianshi.com/?id=199 简介 edge_ngram和ngram是ElasticSearch自带的两个分词器,一般设置索引映射的时候都会用到,设置完步 ...

  9. Solr配置IK分词器

    配置步骤 下载分词器 上传文件 添加jar包 添加配置文件 添加分词器,配置业务域 测试分词器 第一步 下载IK分词器 第二步 上传文件 查看 第三步 添加jar包 到solr工程 cp IKAnal ...

  10. ELK下es的分词器analyzer

    转载链接 :es的分词器analyzerhttps://www.cnblogs.com/xiaobaozi-95/p/9328948.html 中文分词器 在lunix下执行下列命令,可以看到本来应该 ...

最新文章

  1. 数据库的七种传播方式
  2. C语言 time函数 开销,C语言: 函数调用的开销
  3. TensorFlow 教程 --新手入门--1.5 基本使用
  4. 线性表的链式存储-单链表
  5. 关于产品设计的一点儿感想
  6. interface_cast做什么的?
  7. C# MD5算法实现对文件校验
  8. 数字冰雹智慧城市大数据可视化分析决策系统
  9. dcdc升压计算器excel_DC-DC升降压芯片(MC34063A/33063)典型电路与元件参数在线计算_三贝计算网_23bei.com...
  10. Modelica学习笔记3
  11. H3C基础配置文档抄录10-ACL和QoS配置
  12. 随机数字表法计算机分配,随机数表法.ppt
  13. js数组操作方法 concat
  14. 科学计算机怎么用分号,350ms82ms科学计算器使用方法.docx
  15. mysql 难点_数据库技术的重点与难点有什么?
  16. html5获取蓝牙设备列表,【报Bug】官方H5+示例中 搜索蓝牙设备,部分机型搜索不到任何蓝牙...
  17. 【华为OD机试 2023】完美走位(C++ Java JavaScript Python 100%)
  18. i59300h处理器能带动matlab,i5-9300h相当于什么层次 在做选择
  19. 陈强教授《机器学习及R应用》课程 第九章作业
  20. Windows系统合并磁盘分区

热门文章

  1. Intellij idea创建(包、文件)javaWeb以及Servlet简单实现(Tomcat)
  2. word中的总页数不包括封面、目录
  3. 笔记︱精准营销解决方式以及营销组合评估
  4. 《结队-贪吃蛇-项目进度》
  5. 326.是否为3的平方根 IsPowerOfThree
  6. (转载)Java多线程的监控分析工具(VisualVM)
  7. RAID-4与模2和
  8. Linx下静默方式安装weblogic
  9. 手淘适配-flexible
  10. 02-2--数据库MySQL:DDL(Data Definition Language:数据库定义语言)操作数据库中的表(二)...