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

相关推荐
PcVue China2 小时前
PcVue + SQL Grid : 释放数据的无限潜力
大数据·服务器·数据库·sql·科技·安全·oracle
Mephisto.java4 小时前
【大数据学习 | HBASE】hbase的读数据流程与hbase读取数据
大数据·学习·hbase
数据小小爬虫5 小时前
如何用Java爬虫“偷窥”淘宝商品类目API的返回值
java·爬虫·php
光算科技6 小时前
如何用WordPress和Shopify提升SEO表现?
搜索引擎
汤米粥7 小时前
小皮PHP连接数据库提示could not find driver
开发语言·php
SafePloy安策7 小时前
ES信息防泄漏:策略与实践
大数据·elasticsearch·开源
学术搬运工7 小时前
【珠海科技学院主办,暨南大学协办 | IEEE出版 | EI检索稳定 】2024年健康大数据与智能医疗国际会议(ICHIH 2024)
大数据·图像处理·人工智能·科技·机器学习·自然语言处理
涔溪7 小时前
Ecmascript(ES)标准
前端·elasticsearch·ecmascript
Matrix708 小时前
HBase理论_背景特点及数据单元及与Hive对比
大数据·数据库·hbase
fakaifa8 小时前
CRMEB Pro版v3.1源码全开源+PC端+Uniapp前端+搭建教程
前端·小程序·uni-app·php·源码下载