当前位置: 首页 > news >正文

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 受邀亮相展会,围绕“塑造软件新生态,赋能发展新变革”主题,重点展示自研分布式多模数据库及各大行业解决方案&#xff…...

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&#xff09;知识回顾&#xff08;C语言中的TCP流程&#xff09; 2&#xff09;QT中的服务器端/客户端的操作流程 二、代码实现 1&#xff09;服务器 .ui .pro 在pro文件中添加network库 .h #ifndef WIDGET_H #define WIDGET_H#include <QWidget>…...

SpringMVC入门详细介绍

一. SpringMVC简介 Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架&#xff0c;通过把Model&#xff0c;View&#xff0c;Controller分离&#xff0c;将web层进行职责解耦&#xff0c;把复杂的web应用分成逻辑清晰的几部分&#xff0c;简化开发&a…...

R3LIVE源码解析(9) — R3LIVE中r3live_lio.cpp文件

目录 1 r3live_lio.cpp文件简介 2 r3live_lio.cpp源码解析 1 r3live_lio.cpp文件简介 在r3live.cpp文件中创建LIO线程后&#xff0c;R3LIVE中的LIO线程本质上整体流程和FAST-LIO2基本一致。 2 r3live_lio.cpp源码解析 函数最开始会进行一系列的声明和定义&#xff0c;发布的…...

如何高效的解析Json?

Json介绍 Json是一种数据格式&#xff0c;广泛应用在需要数据交互的场景Json由键值对组成每一个键值对的key是字符串类型每一个键值对的value是值类型(boo1值数字值字符串值)Array类型object类型Json灵活性他可以不断嵌套&#xff0c;数组的每个元素还可以是数组或者键值对键值…...

MySQL——分组查询

2023.9.4 MySQL 分组查询的学习笔记如下&#xff1a; #分组查询 /* 分组查询中的筛选条件分为两类&#xff1a;数据源 位置 关键字 分组前筛选 原始表 group by前面 where 分组后筛选 分组后的结果集 group by后面 having */ #查询每…...

thinkphp 使用 easypay 和 easywechat

easypay 是3.x easywechat 是6.x 引入&#xff1a; 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 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 多源数据目录 …...

Android-Intent实现数据传递

在activityA中使用putExtras(bundle)传递数据&#xff0c;在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是一个监控软件&#xff0c;其可以监控各种网络参数&#xff0c;保证企业服务架构安全运营&#xff0c;同时支持灵活的告警机制&#xff0c;可以使得运维人员快速定位故障、解决问题。zabbix支持分布式功能&#xff0c;支持复杂架构下的监控解决方…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...

springboot 日志类切面,接口成功记录日志,失败不记录

springboot 日志类切面&#xff0c;接口成功记录日志&#xff0c;失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...