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

  1. 解压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的区别,后续操作可以根据自己的业务来确定**

相关推荐
小二·21 分钟前
Elasticsearch 面试题精编(26题|含答案|分类整理)
java·大数据·elasticsearch
Apache Flink29 分钟前
打造可编程可集成的实时计算平台:阿里云实时计算 Flink被集成能力深度解析
大数据·阿里云·flink·云计算
CC-NX37 分钟前
大数据安全技术实验:Hadoop环境部署
大数据·hadoop·分布式
万米商云1 小时前
让数据“开口说话”:商城大数据如何预测元器件价格波动与供应风险?
大数据
美林数据Tempodata8 小时前
“双新”指引,AI驱动:工业数智应用生产性实践创新
大数据·人工智能·物联网·实践中心建设·金基地建设
com_4sapi12 小时前
2025 权威认证头部矩阵系统全景对比发布 双榜单交叉验证
大数据·c语言·人工智能·算法·矩阵·机器人
鲸能云13 小时前
政策解读 | “十五五”能源规划下储能发展路径与鲸能云数字化解决方案
大数据·能源
Alex艾力的IT数字空间14 小时前
完整事务性能瓶颈分析案例:支付系统事务雪崩优化
开发语言·数据结构·数据库·分布式·算法·中间件·php
五度易链-区域产业数字化管理平台14 小时前
五度易链大数据治理实战:从数据孤岛到智能决策
大数据
激动的小非14 小时前
电商数据分析报告
大数据·人工智能·数据分析