Elasticsearch 全文搜索引擎 ---- IK分词器

news/2024/7/5 1:36:59

        原理:分词的原理:二叉树        

        首先讲一下为什么要出这个文章,前面我们讲过分词方法:中文分词搜索 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的区别,后续操作可以根据自己的业务来确定


http://lihuaxi.xjx100.cn/news/1518639.html

相关文章

C++信息学奥赛1186:出现次数超过一半的数

#include <bits/stdc.h> using namespace std; int main() {int n;cin >> n; // 输入一个整数nint arr[n]; // 定义一个长度为n的整型数组for (int i 0; i < n; i){cin >> arr[i]; // 输入数组元素}int a, max; // 定义变量a和maxmax a 0; // 初始化ma…

【SA8295P 源码分析】88 - QNX AIS Camer qcarcam_test Dump摄像头图片过程指导、qcarcam_test 使用方法介绍

【SA8295P 源码分析】88 - QNX AIS Camer qcarcam_test Dump摄像头图片过程指导、qcarcam_test 使用方法介绍 一、使用 qcarcam_test dump 摄像头图片1. 通过硬件原理图、代码 来获取摄像头信息2. 扫描 /dev/cci3 总线,确认设备存在:i2ctool /dev/cci3 scan3. 使用 qcarcam_t…

uniapp 手机 真机测试 ​ 云打包 要是没申请 可以使用云打包 然后采用 测试权限即可​

uniapp 手机 真机测试 打开手机 找到手机的 版本号 点击 知道提示 &#xff08;启动开发者模式&#xff09; 然后 在进行usb的连接打开 运行uniapp 到手机基台 手机确认 即可 四&#xff0c; 云打包 要是没申请 可以使用云打包 然后采用 测试权限即可

关于iview select 绑定两个值的方法

因为v-model 只能绑定一个值 所以我们可以有以下思路 1.拼接value :value"item.valueitem.label" // 或者 value.split(/)[0]取值 :value"item.value/item.label" 2.绑定索引 不绑定具体的值&#xff0c;而是去绑定索引值:value"index"&…

模 板 编 译

模板编译 Vue 的核心功能之一&#xff0c;模板编译。我们无需关心如何通过数据操作 DOM 进行页面渲染&#xff0c;这些事情 Vue 内部已经帮我们实现了。我们只需要关心数据层面即可。 基础使用 在选项 data 中定义了 message 变量&#xff0c;只需要在 template 中进行调用即…

七、SSM 框架整合

目前已经学习了 MyBatis 框架&#xff0c;Spring 框架&#xff0c;以及Spring MVC 框架。现阶段学习将这三个框架整合到一起&#xff0c;实现简单的前后端交互的曾删改差功能页面。 Mybatis 框架主要负责数据库的操作问题&#xff0c;以及数据回显。该框架将 SQL 与 Jav…

语音增强-谱减法

导入相关包 import librosa import numpy as np import matplotlib.pyplot as plt from playsound import playsound import soundfile as sf 加载音源 # 干净的声音 clean_wav_file sf1_cln.wav clean, fs librosa.load(clean_wav_file, srNone) # 带噪音的声音 noise_w…

使用maven idea环境

创建模块工程后 idea三种方式执行maven命令 想在哪个工程模块上执行就点开哪一个 如果觉得双击完clean再双击install麻烦&#xff0c;可以 如果有需要还可以给命令后面加参数 ​​​ 第三种&#xff0c;在终端中打开&#xff0c;相当于通过idea进入了命令行 工程导入 导入模块…