elasticsearch的实现全文检索

2023-10-26

elasticsearch一个准实时的搜索引擎,基于lucene构建,它的主要强项还是在全文检索方面。工作中还是使用到了这部分功能,这里做一个简单的总结,可以使初次使用的人很快的配置和使用。
一、全文检索的概念
首先介绍全文检索的概念,就是对一篇文章进行索引,可以根据关键字搜索,类似于mysql里的like语句。
全文索引就是把内容根据词的意义进行分词,然后分别创建索引,例如”你们的激情是因为什么事情来的” 可能会被分词成:“你们“,”激情“,“什么事情“,”来“ 等token
这样当你搜索“你们” 或者 “激情” 都会把这句搜出来。
二、内置分词器
elasticsearch实现全文索引,首先要确定分词器,elasticsearch默认有很多分词器,你可以参考elasticsearch的官方文档。了解分词器主要是怎么实现的。
你可以使用
curl -XPOST http://192.168.0.23:9200/fenci/_analyze?analyzer=standard&pretty=true&text=“我是中国人”
命令来了解各种分词器的分词效果。
{
“token”: “我”,
“start_offset”: 1,
“end_offset”: 2,
“type”: “”,
“position”: 0
}
,
{
“token”: “是”,
“start_offset”: 2,
“end_offset”: 3,
“type”: “”,
“position”: 1
}
,
{
“token”: “中”,
“start_offset”: 3,
“end_offset”: 4,
“type”: “”,
“position”: 2
}
,
{
“token”: “国”,
“start_offset”: 4,
“end_offset”: 5,
“type”: “”,
“position”: 3
}
,
{
“token”: “人”,
“start_offset”: 5,
“end_offset”: 6,
“type”: “”,
“position”: 4
}
三、中文分词器
一般中文分词器一般使用第三方的ik分词器、mmsegf分词器和paoding分词器,他们最初可能构建于lucene,后来移植于elasticsearch。 在最新版的elasticsearch,我主要使用了ik分词器。
我使用的elsaticsearch是2.3.3,elasticsearch和ik分词的对应版本:
这里写图片描述
ik分词的安装:
去ik分词的github去下载源码用maven编译:
对应目录:
这里写图片描述

IndicesAdminClient indicesAdminClient = client.admin().indices();
        AnalyzeAction analyzeAction =  AnalyzeAction.INSTANCE;
        System.out.println("ik分词分析:"+"中华人民共和国国歌 ");
        AnalyzeRequestBuilder request = new  AnalyzeRequestBuilder(indicesAdminClient,analyzeAction,"text","中华人民共和国国歌");
        request.setAnalyzer("ik_max_word");
      //  request.setAnalyzer("ik_smart");
        request.setTokenizer("ik");
// Analyzer(分析器)、Tokenizer(分词器)
        List<AnalyzeResponse.AnalyzeToken> listAnalysis = request.execute().actionGet().getTokens();
        for( AnalyzeResponse.AnalyzeToken b : listAnalysis ){
            System.out.println( b.getTerm() );
        }

ik_max_word: 会将文本做最细粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌”,会穷尽各种可能的组合;
这里写图片描述
ik_smart: 会做最粗粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,国歌”。
这里写图片描述
可根据需求去选择所需要的分词器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

elasticsearch的实现全文检索 的相关文章

随机推荐

  • 妙用mov edi,edi和5个nop实现inline hook

    妙用mov edi edi和5个nop实现inline hook 2008年2月22日 分类 其它技术 标签 inline hook nop 这方法MJ很早时就说过了 简单重复下 大家应该发现大部分API的第一条指令都是mov edi ed
  • MySQL 5.7版本简介

    MySQL的优势 MySQL的主要优势如下 1 速度 运行速度快 2 价格 MySQL对多数个人来说是免费的 3 容易使用 与其他大型数据库的设置和管理相比 其复杂程度较低 易于学习 4 可移植性 能够工作在众多不同的系统平台上 例如 Wi
  • MySQL—SQL优化详解(上)

    作者 小刘在C站 个人主页 小刘主页 努力不一定有回报 但一定会有收获加油 一起努力 共赴美好人生 学习两年总结出的运维经验 以及思科模拟器全套网络实验教程 专栏 云计算技术 小刘私信可以随便问 只要会绝不吝啬 感谢CSDN让你我相遇 前言
  • 【vue】npm install -g @vue/cli出现错误

    进行到npm install g vue cli这一步出现错误 操作步骤如下 1 先下载node js 不知道有没有下载 可以在cmd输入 node v 出现版本号则电脑已经有了node js 没有的话去官网下一个 csdn有其他小伙伴给了
  • Spring Boot全后端实现验证码

    验证码通常是利用前端技术实现的 前端的验证码需要先在后端进行保存 再传到前端 再于前端传输的数据对比校验 一些前后端分离项目的工作量大大增加 而如果完全是由后端独立实现的 那么在代码量和复杂程度上就大大降低了 框架 Spring Boot
  • JavaWeb使用ajax实现定时自动保存草稿功能

    在Web程序开发中 难免有时候会遇到一些定时业务 如考试系统中的自动提交试卷 还有平时写博客时定时自动保存草稿的功能 在JavaWeb中也可以利用ajax技术来实现这定时自动保存草稿这一功能 index jsp关键代码 html代码 加载时
  • 编写QT程序时发现内存泄漏的解决方法

    最近项目结尾进行测试的时候 发现项目持续运行产生大量数据后内存的消耗会无休止的增加 当关闭该窗口时 内存却并没有如期释放 理论上QT中所有的子对象在窗口被销毁时都会一同销毁 最终发现是我在这篇博客上写的添加长按的效果导致的 https bl
  • ipynb 格式文件

    最近碰到文件名后缀为 ipynb文件 起初没太在意这种文件格式 用Notepad 打开之后看到也是类似于JSON格式的信息 以为也是为其他的一些文件服务的 类似于配置一些HTML文件的配置文件 但是后来才发现这也是一种文本表示形式 只不过需
  • Lua:调试篇

    1 Lua代码编辑工具 辣博推荐 ZeroBrane Studio编写Lua脚本还是不错滴 基本的代码补全和提示都具有 按照从下往上的代码逻辑 还可以自动对齐格式 实话讲 还不是很完美 毕竟 作为一个使用习惯Qt如此完美的IDE工具的 Qt
  • [线性dp] aw897. 最长公共子序列(重要模板题+最长公共子序列模型)

    文章目录 0 前言 1 LCS 模板题 0 前言 LCS longest common sub sequences 最长公共子序列 子串 按原顺序依次出现 禁止跳过某元素的序列 具有连续性 子序列 在保持元素前后关系的前提下 可以跳过某些元
  • C语言文件指针设置偏移量--fseek

    一 fseek fseek是设置文件指针偏移量的函数 具体传参格式为 int fseek FILE stream long int offset int whence 返回一个整数 其中 1 stream是指向文件的指针 2 offset是
  • (亲测可用)html5 file调用手机摄像头

    在切图网一个客户的webapp项目中需要用到 html5调用手机摄像头 找了很多资料 大都是 js调用api 然后怎样怎样 做了几个demo测试发现根本不行 后来恍然大悟 用html5自带的 input file 纯html5 并且不涉及到
  • composer.json和composer.lock到底是什么以及区别?

    composer方文档 https docs phpcomposer com 04 schema html我们在做项目的时候 总是要安装一些依赖 composer给我们提供了很多方便 直接运行composer install 当我们运行co
  • Keras 深度学习之猫狗大战

    项目地址和代码 Project Dogs vs Cats 项目详细报告 Report dogs vs cats pdf keras 版本 2 1 5使用滴滴云AI大师码 0212 消费GPU有9折优惠哦 1 问题定义和数据集获取 项目属于计
  • Android RecyclerView 实现瀑布流

    Android RecyclerView 使用大全 基础使用 item 动画 下拉刷新等 瀑布流也是个常用的显示控件了 但是在使用时经常遇到一些问题 比如滑动回顶部后出现空隙 item在滑动时乱跳等问题 下面就来说说我怎么实现的瀑布流 并且
  • 51单片机_动态数码管(定时器中断实现)

    动态数码管 定时器中断 原理 利用定时器0 定时5ms 中断溢出200次即为1s 1s数码管显示的数字加1 一直加到250后归0 全部代码 include
  • ASP.NET Web Pages基础知识---使用Chart 帮助器

    Chart 帮助器 可以创建不同类型的带有多种格式化选项和标签的图表图像 它可以创建面积图 条形图 柱形图 折线图 饼图等标准图表 也可以创建像股票图表这样的更专业的图表 在图表中显示的数据可以是来自一个数组 一个数据库 或者一个文件中的数
  • win10系统anaconda搭建tensorflow环境运行Mask_RCNN以及ubuntu中conda配置

    0 相关说明及anaconda下载安装 0 1 anaconda版本3 4 3 0 0 2 遇到的问题 PermissionError Errno 13 Permission denied C ProgramData Anaconda3 t
  • LeetCode详细题解-Java版

    个人在leetcode刷题的过程中 也记录了一些解题的过程 不一定是最优的 但是都能正确通过 还有一些是官方给的解答 本文会陆陆续续更新 有一些本人看到的一些好的解题博文 本文直接引用了原文 如涉及侵权或博文失效 请联系博主删除博文链接 L
  • elasticsearch的实现全文检索

    elasticsearch一个准实时的搜索引擎 基于lucene构建 它的主要强项还是在全文检索方面 工作中还是使用到了这部分功能 这里做一个简单的总结 可以使初次使用的人很快的配置和使用 一 全文检索的概念 首先介绍全文检索的概念 就是对