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

相关推荐
jianghx102419 分钟前
Docker部署ES,开启安全认证并且设置账号密码(已运行中)
安全·elasticsearch·docker·es账号密码设置
IT小哥哥呀41 分钟前
电池制造行业数字化实施
大数据·制造·智能制造·数字化·mom·电池·信息化
Xi xi xi44 分钟前
苏州唯理科技近期也正式发布了国内首款神经腕带产品
大数据·人工智能·经验分享·科技
yumgpkpm1 小时前
华为鲲鹏 Aarch64 环境下多 Oracle 、mysql数据库汇聚到Cloudera CDP7.3操作指南
大数据·数据库·mysql·华为·oracle·kafka·cloudera
UMI赋能企业2 小时前
制造业流程自动化提升生产力的全面分析
大数据·人工智能
TDengine (老段)3 小时前
TDengine 数学函数 FLOOR 用户手册
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
派可数据BI可视化5 小时前
商业智能BI 浅谈数据孤岛和数据分析的发展
大数据·数据库·数据仓库·信息可视化·数据挖掘·数据分析
jiedaodezhuti5 小时前
Flink性能调优基石:资源配置与内存优化实践
大数据·flink
阿里云大数据AI技术6 小时前
云栖实录 | AI 搜索智能探索:揭秘如何让搜索“有大脑”
人工智能·搜索引擎
Lx3527 小时前
Flink窗口机制详解:如何处理无界数据流
大数据