1.自定义TokenFilter

import org.apache.lucene.analysis.TokenFilter;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public class CourtesyTokenFilter extends TokenFilter {

    private Map<String, String> courtesyMap = new HashMap<>();
    private CharTermAttribute charTermAttribute;

    public CourtesyTokenFilter(TokenStream input) {
        super(input);
        this.charTermAttribute = this.addAttribute(CharTermAttribute.class);
        courtesyMap.put("dr", "doctor");
        courtesyMap.put("mr", "mister");
        courtesyMap.put("mrs", "miss");
    }

    @Override
    public final boolean incrementToken() throws IOException {
        if (!this.input.incrementToken()) {
            return false;
        }

        String term = this.charTermAttribute.toString();
        if (courtesyMap.containsKey(term)) {
            this.charTermAttribute.setEmpty().append(this.courtesyMap.get(term));
        }

        return true;
    }
}

2.应用TokenFilter:

String text = "Hi, Dr Wang, Mr Liu asks if you stay with Mrs Liu yesterday!";
        StandardAnalyzer standardAnalyzer = new StandardAnalyzer();
        CourtesyTokenFilter courtesyTokenFilter = new CourtesyTokenFilter(standardAnalyzer.tokenStream("text", text));
        CharTermAttribute charTermAttribute = courtesyTokenFilter.addAttribute(CharTermAttribute.class);
        courtesyTokenFilter.reset();
        while (courtesyTokenFilter.incrementToken()) {
            System.out.print(charTermAttribute + " ");
        }

3.场景解析

"Hi, Dr Wang, Mr Liu asks if you stay with Mrs Liu yesterday!" 这段文本中,有Dr, Mrs这两个词,我们看不懂,要用全称来显示。

Lucene 7.2.1 自定义TokenFilter的更多相关文章

  1. Lucene 7.2.1 自定义Analyzer和TokenFilter

    1.自定义Analyzer: @Test  public void t01() throws Exception {   ArrayList<String> strings = new A ...

  2. Lucene根据字段进行自定义搜索扩展

    最近需要对公司的产品搜索功能做一步改动,搜索到的结果首先按照是否有库存进行排序,然后再按照销量.由于库存量也是一个整数,如果直接按照库存量进行倒序排序的话,是不符合要求的,Lucene也没有支持我们这 ...

  3. Lucene 中的Tokenizer, TokenFilter学习

      lucene中的TokenStream,TokenFilter之间关系   TokenStream是一个能够在被调用后产生语汇单元序列的类,其中有两个类型:Tokenizer和TokenFilte ...

  4. Lucene 中自定义排序的实现

    使用Lucene来搜索内容,搜索结果的显示顺序当然是比较重要的.Lucene中Build-in的几个排序定义在大多数情况下是不适合我们使用的.要适合自己的应用程序的场景,就只能自定义排序功能,本节我们 ...

  5. lucene学习教程

    1Lucene的介绍 ①Lucene是什么: 是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎 ②Lu ...

  6. 《Lucene in Action 第二版》第4章节 学习总结 -- Lucene中的分析

    通过第四章的学习,可以了解lucene的分析过程是怎样的,并且可以学会如何使用lucene内置分析器,以及自定义分析器.下面是具体总结 1. 分析(Analysis)是什么? 在lucene中,分析就 ...

  7. Lucene 评分机制二 Payload

    这里使用的Lucene4.7.0和Lucene3.X稍有不同 有下面三段内容,我想对船一系列的搜索进行加分 bike car jeep truck bus boat train car ship bo ...

  8. Lucene.net 的性能探究--Lucene.net 的并发处理能力到底有多强?

    这篇博客并不是证明Lucene.net的性能有多强悍,实际上Lucene.net的并发能力并不让人很满意,这得看你怎么用它. 因为Lucene 本身就是一个搜索引擎的基础框架,相当于一辆车子的发动机, ...

  9. Lucene-Analyzer

    Lucene文本解析器实现 把一段文本信息拆分成多个分词,我们都知道搜索引擎是通过分词检索的,文本解析器的好坏直接决定了搜索的精度和搜索的速度. 1.简单的Demo private static fi ...

随机推荐

  1. Call to undefined function Workerman\posix_getpid()

    安装扩展 yum install php-posix

  2. 深入理解JVM(六)类文件结构

    6.1 关于类文件 1.class文件的一次编译,到处运行的跨平台性: 2.JVM不止有跨平台性,还有跨语言性,不管是JRuby还是Groovy写出来的程序,只要编译出符合JVM规范的class文件就 ...

  3. 《Miracle-House团队》第三次作业:团队项目的原型设计与开发

    一.实验目的与要求 1.掌握软件原型开发技术 2.学习使用软件原型开发工具 二.实验内容与步骤 1.开发工具: 使用的工具:墨刀(APP端开发原型) 工具简介: 墨刀(MockingBot)是一款简单 ...

  4. 引用数据类型 Scanner和 Random

    键盘录入Scanner 获取键盘录入的数据,对获取数据的具体操作进行了封装,只需要调用方法,即可得到键盘录入的数据 A:导包            import java.util.Scanner;  ...

  5. navicat for mysql安装与破解

    Windows系统的电脑 navicat for mysql 的安装软件以及破解包 方法/步骤     从网上下载需要用到的navicat for mysql 的安装软件以及破解包.   双击navi ...

  6. Junit 命令行测试 报错:Could not find class 理解及解决方法

    一.报错 : 『Could not find class』 下面给出三个示例比较,其中只有第一个是正确的. 1. MyComputer:bin marikobayashi$ java -cp .:./ ...

  7. WPF实现特殊统计图

    效果图: ActiveFunItem.xaml代码: <UserControl x:Class="SunCreate.Vipf.Client.UI.ActiveFunItem" ...

  8. KMP string pattern matching

    The function used here is from the leetcode. Details can be found in leetcode problem: Implement str ...

  9. accept:Invalid Argument

    错误 #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> int accept(int sockfd, ...

  10. Android 页面跳转之生命周期调用顺序问题

    Android Activity 常用技巧 Android Activity 启动模式和任务栈 Android 页面跳转之生命周期调用顺序问题 一.页面跳转逻辑分析 1.1 跳转逻辑分析 Androi ...