Elasticsearch 全文搜索引擎 ---- IK分词器
原理:分词的原理:二叉树
首先讲一下为什么要出这个文章,前面我们讲过分词方法:中文分词搜索 pscws(感兴趣的同学可以去爬楼看一下),那为什么要讲IK分词?最主要的原因是:pscws分词颗粒度不如IK分词的颗粒度高,现在的需求要求颗粒度细一点,以便提高搜索进度,所以我们今天讲一下IK分词
第一步:安转Elasticsearch,这个在博主原来的文章里面有,所以不在讲述,安装完成后运行结果:
访问地址:http://localhost:9200

第二步:安转IK扩展(现在下载扩展包):需要选择和自己的Elasticsearch对应的版本,我的Elasticsearch版本是7.3.2,下载后存放在:/plugins 目录下:
下载地址:https://gitcode.net/mirrors/medcl/elasticsearch-analysis-ik/-/tree/v7.3.2
直接运行会发现闪退情况:为什么会出现这样的情况,主要有两个原因:
1.版本不配
2.未修改配置 ,配置如何修改?
需要安装 maven 包管理工具,这个是JAVA开发的,所以需要安装JAVA的环境(IK 分词器需要 Java 8 或者以上的版本)
一、下载&安装
1. 下载地址
maven下载地址如下,各位请选择对应系统的maven版本进行下载。
https://maven.apache.org/download.cgi
2. 解压maven安装包
maven安装包下载之后,对其进行解压。

二、配置环境变量:
系统变量新增:变量名:MAVEN_HOME 值:maven存放目录
系统变量追加:变量名:path 值:%MAVEN_HOME%\bin
测试maven是否配置完毕:输入mvn -v命令,如果出现maven版本号,就表明安装成功。
如果报错:
配合:The JAVA_HOME environment variable is not defined correctly This environment variable is needed to run this program NB: JAVA_HOME should point to a JDK not a JRE
没有安装Java的运行环境或者JAVA_HOME的环境变量没有配置,安装好JAVA的运行环境后记得配置JAVA_HOME环境变量,安装好后,再运行mvn -v命令 
查看命令:elasticSearch-plugin list:安装成功

第三步:使用分词(PHP版本):
//引入自动加载文件
require_once APPPATH.'../vendor/es/autoload.php';
//使用命名空间引用
use Elasticsearch\ClientBuilder;
class Test extends CI_Controller
{
//初始化
public function __construct()
{
parent::__construct();
//拼接参数
$params = [
[
'host' => '地址',
'port' => '端口号',
'scheme' => 'http',
'user' => '用户名',
'pass' => '密码'
]
];
//初始化对象
$this->client = ClientBuilder::create()->setHosts($params)->setConnectionPool('连接池地址(相对地址)', []) ->setRetries(10)->build();
}
//分词器
public function ik(){
$params = [
'body' => [
'text' => '中国上海市直辖市静安区',
//ik_max_word 精细 ik_smart 粗略
'analyzer'=>'ik_max_word'
]
];
//请求分词
$res = $this->client->indices()->analyze($params);
var_dump($res);die;
}
}
IK精细分词输出结果:
array(11) {
[0]=>array(5) {
["token"]=>string(6) "中国"["start_offset"]=>int(0)["end_offset"]=>int(2)
["type"]=>string(7) "CN_WORD"["position"]=>int(0)
}
[1]=>array(5) {
["token"]=>string(9) "上海市"["start_offset"]=>int(2)["end_offset"]=>int(5)
["type"]=>string(7) "CN_WORD"["position"]=>int(1)
}
[2]=>array(5) {
["token"]=>string(6) "上海"["start_offset"]=>int(2)["end_offset"]=>int(4)
["type"]=>string(7) "CN_WORD"["position"]=>int(2)
}
[3]=>array(5) {
["token"]=>string(6) "海市" ["start_offset"]=>int(3)["end_offset"]=>int(5)
["type"]=>string(7) "CN_WORD"["position"]=>int(3)
}
[4]=>array(5) {
["token"]=>string(6) "市直" ["start_offset"]=>int(4)["end_offset"]=>int(6)
["type"]=> string(7) "CN_WORD"["position"]=>int(4)
}
[5]=>array(5) {
["token"]=>string(9) "直辖市"["start_offset"]=>int(5)["end_offset"]=>int(8)
["type"]=>string(7) "CN_WORD"["position"]=>int(5)
}
[6]=>array(5) {
["token"]=> string(6) "直辖"["start_offset"]=> int(5)["end_offset"]=>int(7)
["type"]=>string(7) "CN_WORD"["position"]=>int(6)
}
[7]=>array(5) {
["token"]=>string(3) "市"["start_offset"]=>int(7)["end_offset"]=>int(8)
["type"]=>string(7) "CN_CHAR"["position"]=>int(7)
}
[8]=> array(5) {
["token"]=>string(9) "静安区" ["start_offset"]=>int(8)["end_offset"]=> int(11)
["type"]=>string(7) "CN_WORD"["position"]=>int(8)
}
[9]=>array(5) {
["token"]=>string(6) "静安" ["start_offset"]=>int(8)["end_offset"]=>int(10)
["type"]=>string(7) "CN_WORD" ["position"]=>int(9)
}
[10]=>array(5) {
["token"]=>string(3) "区"["start_offset"]=>int(10)["end_offset"]=>int(11)
["type"]=>string(7) "CN_CHAR"["position"]=>int(10)
}
}
}
IK粗略分词:
array(1) {
["tokens"]=>
array(11) {
[0]=>array(5) {
["token"]=>string(6) "中国"["start_offset"]=>int(0)["end_offset"]=>int(2)
["type"]=>string(7) "CN_WORD"["position"]=>int(0)
}
[1]=>array(5) {
["token"]=>string(9) "上海市"["start_offset"]=>int(2)["end_offset"]=>int(5)
["type"]=>string(7) "CN_WORD"["position"]=>int(1)
}
[2]=>array(5) {
["token"]=>string(9) "直辖市"["start_offset"]=>int(5)["end_offset"]=>int(8)
["type"]=>string(7) "CN_WORD"["position"]=>int(5)
}
[3]=> array(5) {
["token"]=>string(9) "静安区" ["start_offset"]=>int(8)["end_offset"]=> int(11)
["type"]=>string(7) "CN_WORD"["position"]=>int(8)
}
}
}
中文分词搜索 pscws
array(4) {
["中国"]=> array(4) {
["word"]=> string(6) "中国"
["times"]=> int(1) ["weight"]=> float(6.2600002288818) ["attr"]=> string(3) "ns"
}
["上海市"]=> array(4) {
["word"]=> string(9) "上海市"
["times"]=> int(1) ["weight"]=> float(7.8200001716614) ["attr"]=> string(3) "ns"
}
["直辖市"]=> array(4) {
["word"]=> string(9) "直辖市"
["times"]=> int(1) ["weight"]=> float(6.8499999046326) ["attr"]=> string(3) "n"
}
["静安区"]=> array(4) {
["word"]=> string(9) "静安区"
["times"]=> int(1) ["weight"]=> float(12.140000343323) ["attr"]=> string(3) "ns"
}
}
至此IK分词器讲解完成,可以对比一下IK与pscws的区别,后续操作可以根据自己的业务来确定
相关文章:
Elasticsearch 全文搜索引擎 ---- IK分词器
原理:分词的原理:二叉树 首先讲一下为什么要出这个文章,前面我们讲过分词方法:中文分词搜索 pscws(感兴趣的同学可以去爬楼看一下),那为什么要讲IK分词?最主要的原因是&…...
Layer 2盛夏已至,StarkNet如何实现价值跃迁?
作者|Jason Jiang Layer 2概念在2023年夏天迎来爆发。Coinbase、ConsenSys等加密巨头纷纷下场,其部署的原生L2解决方案Base、Linea在过去两个月内相继完成主网上线;被誉为L2 四大天王之一的StarkNet也在夏天顺利完成“量子跃迁”升级&#x…...
KaiwuDB 受邀亮相 2023 中国国际“软博会”
8月31日,第二十五届中国国际软件博览会(以下简称“软博会”)在天津盛大开幕。KaiwuDB 受邀亮相展会,围绕“塑造软件新生态,赋能发展新变革”主题,重点展示自研分布式多模数据库及各大行业解决方案ÿ…...
RS-485/RS-422收发器电路 DP3085 国产低成本替代MAX3085
DP3085是5V、半双工、15kV ESD 保护的 RS-485/RS-422 收发器电路,电路内部包含一路驱动器和一路接收器。 DP3085具有增强的摆率限制,助于降低输出 EMI 以及不匹配的终端连接引起的反射,实现 500kbps 的无误码数据传输。 DP3085芯片接收器输入…...
R-which函数(带有arr.ind参数)
目录 一、which()函数 二、元素位置 一、which()函数 which()函数是R语言中的一个基础函数,用于返回满足指定条件的元素的位置或索引。 语法:which(x, arr.ind FALSE, useNames TRUE) 参数: - x:一个向量、数组或矩阵&#x…...
单片机通用学习-什么是时钟?
什么是时钟? 时钟是同步单片机系统各个部件工作时序的最小时间单位,时钟通过 CPU 控制,产生其他与时钟保持一定关系的同步控制信号,协调各部件的工作时序,没有时钟系统就崩溃了。 如 CPU 与存储器(RAM&am…...
PCL入门(二):初识点云数据
目录 1. 点云数据2. 对点云数据的简单操作3. 结果 1. 点云数据 在pcl里面,定义了很多点云数据类型,比如PointXYZ、PointXYZI、PointXYZRGBA等等,每一个都可以看做是点云的一个点的数据。而整个点云的数据类型被定义为PointCloud。 以pcl::P…...
LeetCode 面试题 03.01. 三合一
文章目录 一、题目二、C# 题解 一、题目 三合一。描述如何只用一个数组来实现三个栈。 你应该实现push(stackNum, value)、pop(stackNum)、isEmpty(stackNum)、peek(stackNum)方法。stackNum表示栈下标,value表示压入的值。 构造函数会传入一个stackSize参数&#x…...
【WebSocketIndexedDB】node+WebSocketIndexedDB开发简易聊天室
序幕介绍: WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。 讲人话就是说:WebSocket 使得客户端和服务器之间的数据交换变得更加简单,在 WebSocket API 中,浏览器和服务器只需要完成一次握手&#x…...
【01】弄懂共识机制PoW
基于工作量证明机制的共识机制PoW(Proof of Work) 特点就是多劳多特 共识过程 一个区块链系统中,交易历经多个步骤才能得以上链,并且需要经过多个节点的验证。以下是这些步骤的详细叙述: 交易进入交易池(内…...
QT C++ 基于TCP通信的网络聊天室
一、基本原理及流程 1)知识回顾(C语言中的TCP流程) 2)QT中的服务器端/客户端的操作流程 二、代码实现 1)服务器 .ui .pro 在pro文件中添加network库 .h #ifndef WIDGET_H #define WIDGET_H#include <QWidget>…...
SpringMVC入门详细介绍
一. SpringMVC简介 Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发&a…...
R3LIVE源码解析(9) — R3LIVE中r3live_lio.cpp文件
目录 1 r3live_lio.cpp文件简介 2 r3live_lio.cpp源码解析 1 r3live_lio.cpp文件简介 在r3live.cpp文件中创建LIO线程后,R3LIVE中的LIO线程本质上整体流程和FAST-LIO2基本一致。 2 r3live_lio.cpp源码解析 函数最开始会进行一系列的声明和定义,发布的…...
如何高效的解析Json?
Json介绍 Json是一种数据格式,广泛应用在需要数据交互的场景Json由键值对组成每一个键值对的key是字符串类型每一个键值对的value是值类型(boo1值数字值字符串值)Array类型object类型Json灵活性他可以不断嵌套,数组的每个元素还可以是数组或者键值对键值…...
MySQL——分组查询
2023.9.4 MySQL 分组查询的学习笔记如下: #分组查询 /* 分组查询中的筛选条件分为两类:数据源 位置 关键字 分组前筛选 原始表 group by前面 where 分组后筛选 分组后的结果集 group by后面 having */ #查询每…...
thinkphp 使用 easypay 和 easywechat
easypay 是3.x easywechat 是6.x 引入: use Yansongda\Pay\Pay;//easypayuse EasyWeChat\MiniApp\Application as MiniApp;//easywechat use EasyWeChat\Pay\Application as Payapp;//easywechat public function suborder(){$order [out_trade_no > time(…...
无涯教程-JavaScript - DVARP函数
描述 DVARP函数通过使用列表或数据库中符合您指定条件的记录的字段(列)中的数字,基于整个总体计算总体的方差。 语法 DVARP (database, field, criteria)争论 Argument描述Required/Optionaldatabase 组成列表或数据库的单元格范围。 数据库是相关数据的列表,其中相关信息的…...
Databend 开源周报第 108 期
Databend 是一款现代云数仓。专为弹性和高效设计,为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务:https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展,遇到更贴近你心意的 Databend 。 多源数据目录 …...
Android-Intent实现数据传递
在activityA中使用putExtras(bundle)传递数据,在activityB中使用getExtras()获取数据 MainActivity.java及其xml package com.example.intentactivity;import androidx.appcompat.app.AppCompatActivity;import android.content.ComponentName; import android.co…...
系统学习Linux-zabbix监控平台
一、zabbix的基本概述 zabbix是一个监控软件,其可以监控各种网络参数,保证企业服务架构安全运营,同时支持灵活的告警机制,可以使得运维人员快速定位故障、解决问题。zabbix支持分布式功能,支持复杂架构下的监控解决方…...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
