ES elasticsearch-analysis-dynamic-synonym连接数据库动态更新synonym近义词

2023-12-19

ES elasticsearch-analysis-dynamic-synonym连接数据库动态更新synonym近义词

修改源码实现连接数据库获取近义词汇
下载elasticsearch-analysis-dynamic-synonym打开项目(https://github.com/bells/elasticsearch-analysis-dynamic-synonym/tree/master)

一、修改pom.xml

引入依赖

<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<version>8.0.21</version>
</dependency>

<!--或者oracle-->
<dependency>
    <groupId>com.oracle.ojdbc</groupId>
    <artifactId>ojdbc8</artifactId>
    <version>19.3.0.0</version>
</dependency>

将pom文件中的版本修改成跟你的es版本号一样的,比如我的是7.2.0

使用不同的版本对应的lucene包不同,某些代码略有不同,根据编译器提示修改即可,下面的代码照常添加

<version>7.2.0</version>

二、 修改main/assemblies/plugin.xml

​ 在标签下添加 根据不同环境二选一

 <!--添加mysql-connector依赖-->
<dependencySet>
    <outputDirectory/>
    <useProjectArtifact>true</useProjectArtifact>
    <useTransitiveFiltering>true</useTransitiveFiltering>
    <includes>
    	<include>mysql:mysql-connector-java</include>
    </includes>
</dependencySet>

<!--将 oracle 的 jar 包打包进 zip 包-->
<dependencySet>
    <outputDirectory/>
    <useProjectArtifact>true</useProjectArtifact>
    <useTransitiveFiltering>true</useTransitiveFiltering>
    <includes>
        <include>com.oracle.ojdbc:ojdbc8</include>
    </includes>
</dependencySet>

在标签下添加(与标签同级)

<fileSets>
    <fileSet>
        <directory>${project.basedir}/config</directory>
        <outputDirectory>config</outputDirectory>
    </fileSet>
</fileSets>

三、jdbc配置文件

在项目根目录下创建config/jdbc.properties文件,写入以下内容

# mysql
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false&serverTimezone=Asia/Shanghai
jdbc.username=账号
jdbc.password=密码
#近义词sql查询语句。(注意要以words字段展示)
synonym.word.sql=SELECT `keys` AS words FROM es_synonym WHERE ifdel = '0'
#获取近义词最后更新时间,用来判断是否发生了更新。(注意要以maxModitime词汇显示)
synonym.lastModitime.sql=SELECT MAX(moditime) AS maxModitime FROM es_synonym
interval=10

# 配置连接oracle数据库
jdbc.driver=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:ORCL
jdbc.username=root
jdbc.password=123456
#近义词sql查询语句。(注意要以words字段展示)
synonym.word.sql=select SYNONYM_KEY as words from es_synonym where IS_DELETED = '0'
#获取近义词最后更新时间,用来判断是否发生了更新。(注意要以maxModitime词汇显示)
synonym.lastModitime.sql=SELECT MAX(UPD_TIME) AS maxModitime FROM es_synonym
interval=60

四、编写加载词汇类

1、创建DynamicSynonymFromDb类

在com.bellszhu.elasticsearch.plugin.synonym.analysis包下,我们可以看到很多加载近义词汇的类,比如RemoteSynonymFile类就是通过接口来加载近义词词汇的。
​ 我们在该包下创建类DynamicSynonymFromDb,同时继承SynonymFile接口,该类是用来读取数据库的近义词汇的,代码如下:

/**
 * @author yandi
 * @date 2023/06/15
 */
public class DynamicSynonymFromDb implements SynonymFile {
   

    /**
     * 配置文件名
     */
    private final static String DB_PROPERTIES = "jdbc.properties";

    private static Logger logger = LogManager.getLogger("dynamic-synonym");

    private String format;

    private boolean expand;

    private boolean lenient;

    private Analyzer analyzer;

    private Environment env;

    /**
     * 动态配置类型
     */
    private String location;

    /**
     * 作用类型
     */
    private String group;

    private long lastModified;

    private Path conf_dir;

    private JdbcConfig jdbcConfig;

    DynamicSynonymFromDb(Environment env, Analyzer analyzer,
                         boolean expand, boolean lenient, String format, String location, String group) {
   
        this.analyzer = analyzer;
        this.expand = expand;
        this.lenient = lenient;
        this.format = format;
        this.env = env;
        this.location = location;
        this.group = group;
        // 读取配置文件
        setJdbcConfig();
        // 加载驱动
        try {
   
            Class.forName(jdbcConfig.getDriver());
        } catch (ClassNotFoundException e) {
   
            e.printStackTrace();
        }
        // 判断是否需要加载
        isNeedReloadSynonymMap()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ES elasticsearch-analysis-dynamic-synonym连接数据库动态更新synonym近义词 的相关文章

随机推荐

  • 不是帆软BI用不起,而是奥威BI更具性价比

    说起BI软件 很多人都要提名帆软BI 但帆软BI虽好 却不一定适合所有企业 对很多预算一般的企业来说 性价比高的BI软件更符合实际情况 而要说起BI软件的性价比之王 那就不得不提奥威BI软件了 这是一款可0开发做企业数据分析的国产自研BI软
  • Try `npm install @types/postcss-plugin-px2rem` if it exists or add a new declaration (.d.ts) file...

    问题 Try npm install types postcss plugin px2rem if it exists or add a new declaration d ts file 这是由于引入第三方库但缺少声明文件的情况 这时 T
  • 项目进度管理:项目经理把控项目进度的技巧

    到项目后期 加班越发频繁 今天我们得加班完成这点工作了 这是在项目里我们听到最多的一句话 王嘉在公司好几年 也参与了几个项目 由于他各方面出色表现 公司分配给他一个小项目 初次成为项目经理的他信心满满 他觉得这不是一件难事 每天只需要监督好
  • Dubbo怎么实现动态感知服务下线的呢?

    Dubbo是一个高性能 轻量级的开源Java RPC框架 用于服务间的远程通信 为了实现动态感知服务下线 Dubbo提供了多种策略 服务监控 Dubbo提供了内置的监控功能 通过在服务提供者上配置监控信息 可以实时监测服务状态 当服务下线时
  • AntDB-T提升查询性能的关键之查询优化解析

    查询优化器 是提升查询效率非常重要的手段 本文将主要介绍 AntDB T数据库查询优化 的相关设计 AntDB T数据库是一款企业级通用分布式关系型数据库 而查询是AntDB T数据库管理系统中最关键 最吸引人的功能之一 每个生产数据库系统
  • FAM amine, 6-isomer,1313393-44-0,含有纯6-异构体的荧光团,6-FAM NH2

    产品名称 FAM amine 6 isomer 6 FAM NH2 中文名称 6 羧基荧光素 氨基 CAS 1313393 44 0 分子式 C27H26N2O6 分子量 474 51 纯度 95 结构式 产品描述 荧光素衍生物具有胺基 含
  • 自定义WheelView

    项目中用到一个比较觉得不错的控件 WheelView 即上下滚动View 它是继承ScrollView实现 在Android各版本上的效果都是如下 也许在git上有许多这样功能的控件 但个人认为这个控件实现的方式简单 比较让人容易理解 对自
  • Zookeeper 和 Dubbo 的关系?

    Zookeeper的作用 zookeeper用来注册服务和进行负载均衡 哪一个服务由哪一个机器来提供必需让调用者知道 简单来说就是ip地址和服务名称的对应关系 当然也可以通过硬编码的方式把这种对应关系在调用方业务代码中实现 但是如果提供服务
  • java 员工绩效管理系统Myeclipse开发mysql数据库MVC结构serlvet编程计算机网页项目

    一 源码特点 java 员工绩效管理系统是一套完善的java web信息管理系统 对理解JSP java编程开发语言有帮助 系统采用serlvet dao bean 系统具有完整的源代码和数据库 系统主要采用B S模式开发 开发工具myec
  • 64.Oracle19cPDB的创建和删除

    1 创建PDB CREATE PLUGGABLE DATABASE DB CROSS ADMIN USER pdbadmin IDENTIFIED BY enmo 2023 ROLES dba DEFAULT TABLESPACE CROS
  • Linux中seLinux是什么?关闭会造成哪些影响?

    seLinux是一种安全增强型的Linux操作系统 其主要作用是强化系统的安全性和保护系统资源免受未经授权的访问和攻击 其提供了三种工作模式 分别是Disabled工作模式 Permissive工作模式和Enforcing工作模式 那么Li
  • CNN和TCN的区别和联系

    CNN 卷积神经网络 和TCN 时间卷积网络 都是神经网络的变体 用于处理不同类型的数据 以下是它们的主要区别和联系 区别 应用领域 CNN 主要用于处理图像数据 具有在空间维度上捕捉局部特征的能力 常用于计算机视觉任务 TCN 主要用于处
  • Python中的定时器用法:Timer定时器和schedule库

    目录 一 引言 二 Timer定时器 1 Timer定时器的原理 2 Timer定时器的使用方法 3 Timer定时器的实际应用案例 三 schedule库 1 schedule库的原理 2 schedule库的使用方法 3 schedul
  • 62.$ORACLE_HOME/.patch_storage是否可以删除

    1 此目录为是Oracle打补丁时被替换的文件的备份 是的 即使成功安装了补丁程序 也必须保留 ORACLE HOME patch storage目录 1 将临时补丁应用到Oracle主目录时 OPatch将补丁信息存储在 ORACLE H
  • Linux-----13、用户、组

    用户 组 一 用户管理 用户概念及作用 了解 用户 指的是Linux操作系统中用于管理系统或者服务的人 一问 管理系统到底在 管理什么 答 Linux下一切皆 文件 所以用户管理的是相应的文件 二问 如何管理 文件呢 答 文件基本管理 比如
  • 宿主机和容器

    宿主机 Host 和容器 Container 是 Docker 中的两个重要概念 描述了 Docker 环境中的两个主要部分 宿主机 Host 宿主机是指安装了 Docker 引擎 Docker Engine 的物理计算机或虚拟机 它是 D
  • 从 MySQL 到 DolphinDB,Debezium + Kafka 数据同步实战

    Debezium 是一个开源的分布式平台 用于实时捕获和发布数据库更改事件 它可以将关系型数据库 如 MySQL PostgreSQL Oracle 等 的变更事件转化为可观察的流数据 以供其他应用程序实时消费和处理 本文中我们将采用 De
  • VSCode 代码高亮 变量类型、函数名、类名没有颜色 - 设置主题即可

    https zhuanlan zhihu com p 630401039 之前应该设置主题了 但不知道为啥C 里面只有 int 有高亮 其他像 cv Mat 函数名 类名都没有颜色 解决方案是重新设置一下主题 File preference
  • 使用SQL和Python处理Excel文件数据

    目录 一 引言 二 使用SQL查询Excel文件数据 1 导入必要的库 2 创建数据库连接 3 读取Excel文件数据 4 将数据写入数据库 5 使用SQL查询数据 三 使用Python读取和处理Excel文件数据 1 导入必要的库 2 读
  • ES elasticsearch-analysis-dynamic-synonym连接数据库动态更新synonym近义词

    ES elasticsearch analysis dynamic synonym连接数据库动态更新synonym近义词 修改源码实现连接数据库获取近义词汇 下载elasticsearch analysis dynamic synonym打