【蓝领送工源码】【头条指标源码】【波段反弹源码】ik 分词 源码_ik分词源码

时间:2024-11-08 11:11:38 编辑:smack源码分析 来源:java erp系统 源码

1.Elasticsearch Query详解
2.Elasticsearch7.8.0集成IK分词器改源码实现MySql5.7.2实现动态词库实时更新
3.elasticsearch 用什么语言开发

ik 分词 源码_ik分词源码

Elasticsearch Query详解

       filter和query是分词分词Elasticsearch中两个重要的概念。

       filter不参与评分,源码源码它的分词分词目标只是判断某个条件是或者否,并且可以利用缓存提高效率。源码源码

       而query则会计算评分,分词分词它的源码源码蓝领送工源码目标是为了判断相关性,但由于计算评分,分词分词效率比filter要低。源码源码

       index、分词分词search和storestore、源码源码_source和doc_values是分词分词Elasticsearch中的几个关键概念。

       我们可以将Elasticsearch对数据的源码源码存储查询过程分为三个阶段:索引(index)、查询(search)和取回(fetch)。分词分词

       在索引阶段,源码源码Elasticsearch会解析源文档,分词分词按照mapping配置和字段配置对字段进行索引,并将整个源文档存储(如果没有禁用_source),头条指标源码将指定的字段进行store存储,另外还会为指定字段建立doc_values存储(如果doc_values可用)。

       在查询阶段,Elasticsearch会解析query DSL,通过索引或doc_values对字段进行检索和过滤,找到符合条件的文档ID,对于需要聚合计算的,会取出文档并进行计算。

       在取回阶段,Elasticsearch会根据需求返回指定的字段,指定_source,fields,或者docvalue_fields,这三个对应三个不同的存储位置,它们的作用也不同。

       fields、波段反弹源码_source、stored_fields、docvalue_fields都是用来获取自己想要的字段,其中ES推荐使用fields。

       fields和_source类似,但是fields会从_source中取出相应的字段数据并按照mapping设置进行一些格式处理、运行时字段计算等。

       stored_fields是用来取出被store的字段,通常不建议使用。

       docvalue_fields是用来取出建立了doc_values的字段,但部分类型可能不支持。

       检索特性中的collapse字段折叠可以根据特定的字段进行分组,每组都返回结果,例如搜索手机时,可以按品牌字段进行折叠,返回每个品牌的css源码代码可排序、过滤的数据。

       filter过滤有两种使用方式。

       highlight高亮是对存在检索关键词的结果字段添加特殊标签,ES支持三种Highlighter。

       Highlighter的工作原理是对于一个查询,Highlighter需要找到最佳的文本片段并且高亮目标词句,这需要解决以下三个问题。

       async异步搜索支持异步查询,可以使用get async search查看检索的运行状态。

       near real-time近实时搜索添加或更新文档不会修改旧的索引文件,而是将新文件写入缓存,延迟刷盘,可以通过API强制更新索引。

       pagination分页支持普通分页、深度分页scroll和search after。

       inner hits可以查询出不同阶段文档命中,epoll模型源码例如在字段折叠中,可以查询出每个分组下具体有哪些文档。

       selected field可以返回需要的字段,使用_source filter、fields、docvalue_fields、stored_fields返回需要的文档字段。

       across clusters分布式检索支持多种检索API的分布式搜索。

       multiple indices多索引检索支持同时从多个索引检索数据。

       shard routing分片路由可以提高容错和检索能力。

       自定义检索模板search templates可以复用检索模板,根据不同变量生成不同的query DSL,使用Mustache语法。

       同义词检索search with synonyms可以定义同义词集,提高检索准确度。

       排序sort results支持多字段、数组字段、嵌套字段排序。

       所有的检索特性可以查看官方文档。

       query用于回答相似度是多少的问题,计算评分。

       filter用于回答是或否的问题,不计算评分,可使用缓存,效率更高。

       组合查询BooleanBoosting在ik分词测试时,需要将analyzer和search_quote_analyzer设置成一样的分词器,才能正确检索出结果。

       match_phrase容易受到停用的影响,不配置ik的停用词影响match搜索,配置之后影响match_phrase,需要修改源码。

Elasticsearch7.8.0集成IK分词器改源码实现MySql5.7.2实现动态词库实时更新

       本文旨在探讨 Elasticsearch 7.8.0 集成 IK 分词器的改源码实现,配合 MySQl 5.7.2 实现动态词库实时更新的方法。

       IK 分词器源码通过 URL 请求文件或接口实现热更新,无需重启 ES 实例。然而,这种方式并不稳定,因此,采用更为推荐的方案,即修改源码实现轮询查询数据库,以实现实时更新。

       在进行配置时,需下载 IK 分词器源码,并确保 maven 依赖与 ES 版本号相匹配。引入 MySQl 驱动后,开始对源码进行修改。

       首先,创建一个名为 HotDictReloadThread 的新类,用于执行远程词库热更新。接着,修改 Dictionary 类的 initial 方法,以创建并启动 HotDictReloadThread 实例,执行字典热更新操作。

       在 Dictionary 类中,找到 reLoadMainDict 方法,针对扩展词库维护的逻辑,新增代码加载 MySQl 词库。为此,需预先在数据库中创建一张表,用于维护扩展词和停用词。同时,在项目根路径的 config 目录下创建 jdbc-reload.properties 配置文件,用于数据库连接配置。

       通过 jdbc-reload.properties 文件加载数据库连接,执行扩展词 SQL,将结果集添加到扩展词库中。类似地,实现同步 MySQl 停用词的逻辑,确保代码的清晰性和可维护性。

       完成基础配置后,打包插件并将 MySQl 驱动 mysql-connector-java.jar 与插件一同发布。将插件置于 ES 的 plugins 目录下,并确保有相应的目录结构。启动 ES,查看日志输出,以验证词库更新功能的运行状态。

       在此过程中,可能遇到如 Column 'word' not found、Could not create connection to database server、no suitable driver found for jdbc:mysql://...、AccessControlException: access denied 等异常。通过调整 SQL 字段别名、确认驱动版本匹配、确保正确配置环境以及修改 Java 政策文件,这些问题均可得到解决。

       本文通过具体步骤和代码示例,详细介绍了 Elasticsearch 7.8.0 集成 IK 分词器,配合 MySQl 5.7.2 实现动态词库实时更新的完整流程。读者可根据本文指南,完成相关配置和代码修改,以实现高效且稳定的词库管理。

elasticsearch 用什么语言开发

       Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。