小工具      在线工具  汉语词典  css  js  c++  java

elasticsearch IK 中文分词器 精确查询

Java,elasticsearch,java,es,大数据 额外说明

收录于:43天前

在 Mac 上安装 ElasticSearch 6.6.2

MAC下安装ElasticSearch Head插件

基于上面两篇文章,我们来学习一下IK

IKAnalyzer:一个免费开源的 java 分词器。它是目前比较流行的中文分词器之一。简单、稳定。如果你想要特别好的结果,你需要维护自己的词汇表并支持自定义词典。

1.安装ik分词器插件

下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases?after=v6.4.2,版本如下图:

然后在elasticsearch下的plugins文件下创建一个ik文件夹,将上面的压缩包解压到这里。

修改ik文件下的plugin-descriptor.properties文件,设置版本号(我这里使用的elasticsearch版本号是6.2.2,ik版本号是6.3.0,官网说同大版本可以使用number,这里的主要版本是6),如下:

description=IK Analyzer for Elasticsearch
#
# 'version': plugin's version
version=6.3.0
#
# 'name': the plugin name
name=analysis-ik
#
# 'classname': the name of the class to load, fully-qualified.
classname=org.elasticsearch.plugin.analysis.ik.AnalysisIkPlugin
#
# 'java.version' version of java the code is built against
# use the system property java.specification.version
# version string must be a sequence of nonnegative decimal integers
# separated by "."'s and may have leading zeros
java.version=1.8
#
# 'elasticsearch.version' version of elasticsearch compiled against
# You will have to release a new version of the plugin for each new
# elasticsearch release. This version is checked when the plugin
# is loaded so Elasticsearch will refuse to start in the presence of
# plugins with the incorrect elasticsearch.version.
elasticsearch.version=6.2.2

然后重新启动elasticsearch:进入bin文件夹并执行命令elasticsearch。

启动成功界面如下:

2. 常用ES接口测试

1. 创建索引

http://localhost:9200/es  PUT

执行结果:
{
    "acknowledged": true,
    "shards_acknowledged": true,
    "index": "es"
}

2.创建表并设置分词创建映射

http://localhost:9200/es/_mapping/doc  POST
参数:Content-Type  application/json
{
  "properties":{
    "content":{
      "type":"text",
      "analyzer":"ik_max_word",
      "search_analyzer":"ik_smart"
    }
  }
}

执行结果:
{
    "acknowledged": true
}

3.添加数据,添加4条测试数据

http://localhost:9200/es/doc/1  POST
header: Content-Type :application/json
参数:
{
  "content":"美国留给伊拉克的是个烂摊子吗"
}

http://localhost:9200/es/doc/2  POST
header: Content-Type :application/json
{
  "content":"公安部:各地校车将享最高路权"
}

http://localhost:9200/es/doc/3  POST
header: Content-Type :application/json
{
  "content":"中韩渔警冲突调查:韩警平均每天扣1艘中国渔船"
}

http://localhost:9200/es/doc/4  POST
header: Content-Type :application/json
{
  "content":"中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"
}
执行结果:
{
    "_index": "es",
    "_type": "doc",
    "_id": "4",
    "_version": 1,
    "result": "created",
    "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
    },
    "_seq_no": 1,
    "_primary_term": 1
}

4、分词搜索,找到2条数据如下【匹配查询(注意匹配查询只能针对单个字段)】

http://localhost:9200/es/_search  POST
参数:
{
  "query": {
    "match": {
      "content": "中国"
    }
  }
}

执行结果:
{
    "took": 2,
    "timed_out": false,
    "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 2,
        "max_score": 0.6489038,
        "hits": [
            {
                "_index": "es",
                "_type": "doc",
                "_id": "4",
                "_score": 0.6489038,
                "_source": {
                    "content": "中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"
                }
            },
            {
                "_index": "es",
                "_type": "doc",
                "_id": "3",
                "_score": 0.2876821,
                "_source": {
                    "content": "中韩渔警冲突调查:韩警平均每天扣1艘中国渔船"
                }
            }
        ]
    }
}

5、删除索引

http://localhost:9200/index  delete

6.分析分词_analyze

http://localhost:9200/_analyze  POST
参数:
{
	"analyzer":"ik_max_word",
	"text":"中国人"
}

执行结果:
{
    "tokens": [
        {
            "token": "中国人",
            "start_offset": 0,
            "end_offset": 3,
            "type": "CN_WORD",
            "position": 0
        },
        {
            "token": "中国",
            "start_offset": 0,
            "end_offset": 2,
            "type": "CN_WORD",
            "position": 1
        },
        {
            "token": "国人",
            "start_offset": 1,
            "end_offset": 3,
            "type": "CN_WORD",
            "position": 2
        }
    ]
}

3. 精确合并查询(and、or)

1.所有数据如下:

http://localhost:9200/es/_search  查所有数据,如下:

{
    "took": 1,
    "timed_out": false,
    "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 6,
        "max_score": 1,
        "hits": [
            {
                "_index": "es",
                "_type": "doc",
                "_id": "5",
                "_score": 1,
                "_source": {
                    "content": "美国人特朗普垃圾"
                }
            },
            {
                "_index": "es",
                "_type": "doc",
                "_id": "4",
                "_score": 1,
                "_source": {
                    "content": "中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"
                }
            },
            {
                "_index": "es",
                "_type": "doc",
                "_id": "2",
                "_score": 1,
                "_source": {
                    "content": "公安部:各地校车将享最高路权"
                }
            },
            {
                "_index": "es",
                "_type": "doc",
                "_id": "6",
                "_score": 1,
                "_source": {
                    "content": "美航空母舰国人"
                }
            },
            {
                "_index": "es",
                "_type": "doc",
                "_id": "1",
                "_score": 1,
                "_source": {
                    "content": "美国人111"
                }
            },
            {
                "_index": "es",
                "_type": "doc",
                "_id": "3",
                "_score": 1,
                "_source": {
                    "content": "中韩渔警冲突调查:韩警平均每天扣1艘中国渔船"
                }
            }
        ]
    }
}

2.或查询

http://localhost:9200/es/_search 
参数:
{
  "query": {
    "match": {
      "content": "美国人1"   
    }
  }
}

从上面的结果可以分析出:这是因为解析器会将“美国111”拆分成“美国”和“111”2个单词,而默认的运算符是or,所以上面的2个单词都是找到文章数据的。

3、使用和查询,实现精准查询

http://localhost:9200/es/_search?pretty=true  POST

{
  "query": {
      "match": {
	        "content": {
		        "query": "美国人111",
		        "operator": "and"
		        }
             }
        }
}

从上面的结果可以看出,查询结果内容包含“美国人”和“111”的记录。并且被使用,因此找到了准确的数据。

4.“美国111”上面的分词,可以被划分为下面的几个词,如下截图:

ik_max_word:将文本拆分为最细粒度,例如将“中华人民共和国国歌”拆分为“中华人民共和国、中华人民共和国、中国、中国、中华人民共和国、人民、人民、人民” 、共和国、共和国、、国国、国歌”将穷尽所有可能的组合,适合Term查询;

ik_smart:会做最粗粒度的拆分,例如将“中华人民共和国国歌”拆分为“中华人民共和国国歌”,适合词组查询。


参考:https://www.jianshu.com/p/362f85ebf383

           https://www.cnblogs.com/cjsblog/p/9910788.html

. . .

相关推荐

额外说明

Keil编译后代码、变量等的占用

Keil编译后代码、变量等占用情况 举例说明:Program Size: Code=35004 RO-data=119648 RW-data=580 ZI-data=65732 Code:代码 RO-data:const uint8_t a[2] = {

额外说明

你了解垃圾收集算法吗?

目前来说Java堆中的对象是分为新生代和老年代,对于新生代中的对象采用的是复制算法清理 1、复制算法 它将可用内存空间划分为一块较大的Eden空间和两块较小的From Survivor(S0)和To Survivor(S1)空间。每次使用时只使用Eden

额外说明

【算法千题案例】每日LeetCode打卡——76.字符串中的单词数

-前言 -原题样例:字符串中的单词数 -C#方法:原地法 -Java 方法:原地法 -总结 -前言 - 算法题 - - 每天打卡一道算法题,既是一个学习过程,又是一个分享的过程- - 提示:本专栏解题 编程语言一律使用 C# 和 Java 两种进行解题

额外说明

☀️ 学会编程入门必备 C# 最基础知识介绍(三)——变量、常量、运算符、判断、循环

C#变量- C# 中的变量定义 C# 中的 Lvalues 和 Rvalues 常量- 整数常量 浮点常量 字符常量 字符串常量 定义常量 C# 运算符- 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 其他运算符 C# 中的运算符优先级- C

额外说明

字典转为json并存入文件内,然后再从这个文件中读取出‘帅’这个字符打印出来

1.题目: data = { “name”: “nanbei”, “age”: 18, “feature” : [“高”, “富”, “帅”] } 在程序中将这个字典转化为json并存入文件内, 然后再从这个文件中读取出‘帅’这个字符打印出来 2.代码解

额外说明

【C语言拓展】预处理

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 预处理 利用宏创建字符串、宏拼接、可变参数宏 取消宏定义、#if #elif #else #endif #ifdef #endif ____TIME____、____DATA__

额外说明

算法-股票交易日

题目描述 这是美团的2016招聘的笔试题。 题目描述 在股市的交易日中,假设最多可进行两次买卖(即买和卖的次数均小于等于2),规则是必须一笔成交后进行另一笔(即买-卖-买-卖的顺序进行)。给出一天中的股票变化序列,请写一个程序计算一天可以获得的最大收益。

额外说明

Golang使用Gin、GORM和MySQL进行三层架构

学习目标: 1.学习使用Gin和GORM结合 2. 学习Golang 中的三层构架 学习内容: 当使用Golang的Gin、GORM和MySQL进行三层架构的CRUD操作时,你可以按照以下步骤进行: 1. 创建Model结构体: 首先,创建一个`mode

额外说明

JS合并两个数组的方法

我们在项目过程中,有时候会遇到需要将两个数组合并成为一个的情况。   比如: var a = [1,2,3]; var b = [4,5,6];   有两个数组a、b,需求是将两个数组合并成一个。方法如下:   1、concat     js的Array

ads via 小工具