elasticsearch 使用 ik分词器

在elasticsearch全文搜索中,如果需要用到中文分词,可以选择默认的分词器,但是默认分词器的分词效果不太好,我们可以选择ik分词器。

ik分词器支持的版本,目前我们基本都是根据elasticsearch 的版本选择对应的ik分词器版本,

目前使用elasticsearch-7.16.0, 那么分词器也选择7.16.0,下面是对应的版本选择

es常用数据类型

字段的数据类型由字段的属性type指定,ElasticSearch支持的基础数据类型主要有:

  • 字符串类型:keyword和text。(在5.0之后更改,原来为string)。
  • 数值类型:字节(byte)、2字节(short)、4字节(integer)、8字节(long)、float、double;
  • 布尔类型:boolean,值是true或false;
  • 时间/日期类型:date,用于存储日期和时间;
  • 二进制类型:binary;
  • IP地址类型:ip,以字符串形式存储IPv4地址;
  • 特殊数据类型:token_count,用于存储索引的字数信息

 安装ik分词器有两种方法

1、直接下载 对应分词器压缩包 然后解压到对应目录,安装完成后重启es

cd /data/es/elasticsearch-7.16.0-node-1/plugins/
mkdir ik
cd ik
wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.16.0/elasticsearch-analysis-ik-7.16.0.zip

unzip elasticsearch-analysis-ik-7.16.0.zip

2、使用 elasticsearch-plugin 安装(从 v5.5.1 版本支持),安装完成重启es

cd /data/es/elasticsearch-7.16.0-node-1/

./bin/elasticsearch-plugin install wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.16.0/elasticsearch-analysis-ik-7.16.0.zip

测试分词器

{
    "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": 2,
            "end_offset": 3,
            "type": "CN_CHAR",
            "position": 2
        },
        {
            "token": "石家庄市",
            "start_offset": 3,
            "end_offset": 7,
            "type": "CN_WORD",
            "position": 3
        },
        {
            "token": "石家庄",
            "start_offset": 3,
            "end_offset": 6,
            "type": "CN_WORD",
            "position": 4
        },
        {
            "token": "家庄",
            "start_offset": 4,
            "end_offset": 6,
            "type": "CN_WORD",
            "position": 5
        },
        {
            "token": "市",
            "start_offset": 6,
            "end_offset": 7,
            "type": "CN_CHAR",
            "position": 6
        },
        {
            "token": "高新区",
            "start_offset": 7,
            "end_offset": 10,
            "type": "CN_WORD",
            "position": 7
        },
        {
            "token": "高新",
            "start_offset": 7,
            "end_offset": 9,
            "type": "CN_WORD",
            "position": 8
        },
        {
            "token": "新区",
            "start_offset": 8,
            "end_offset": 10,
            "type": "CN_WORD",
            "position": 9
        },
        {
            "token": "虚度",
            "start_offset": 10,
            "end_offset": 12,
            "type": "CN_WORD",
            "position": 10
        },
        {
            "token": "大道",
            "start_offset": 12,
            "end_offset": 14,
            "type": "CN_WORD",
            "position": 11
        }
    ]
}

在使用ElasticSearch的时候,我们会牵扯到很多的请求方法,比如GET,POST,PUT,DELETE等等,这些方法使用的都是Restful的调用风格,我们来简单介绍下这些方法

  • GET 请求:获取服务器中的对象
    • 相当于SQL的Select命令
    • GET /test_analysis 获取所有的test_analysis信息,默认查询10条
  • POST 请求:在服务器上更新对象
    • 相当于SQL的update命令
    • POST /test_analysis/1 更新id为1的test_analysis的信息
  • PUT 请求:在服务器上创建对象
    • 相当于SQL的create命令
    • PUT /test_analysis/id 创建一个id为xx的数据
  • DELETE 请求:删除服务器中的对象HEAD 请求:仅仅用于获取对象的基础信息
    • 相当于sql中的delete命令
    • DELETE /test_analysis/1 删除id为1的数据

创建索引并指定分词器

http://127.0.0.1:9200/test_analysis?pretty

PUT /test_analysis

{
  "mappings": {
    "properties": {
      "content": {
        "type": "text",
        "analyzer": "ik_max_word",
        "search_analyzer": "ik_smart"
      }
    }
  }
}

查看索引映射:

curl http://127.0.0.1:9200/test_analysis/_mapping?pretty

删除索引

curl -X DELETE 'http://127.0.0.1:9200/test_analysis?pretty=null'

新增数据

curl -X GET 'http://elastic:dsydnn@127.0.0.1:9200/test_analysis/_doc?pretty=null' \
-H 'Content-Type: application/json' \
-d '
{
"content" : "我是中国人"
}'

 查询:

curl  -X GET 'http://127.0.0.1:9200/test_analysis/_search?pretty=null' \
-H'Content-Type: application/json' \
-d '{
    "query": {
        "bool": {
            "must": [
                {
                    "term": {
                        "content": "中"
                    }
                }
            ]
        }
    }
}'

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要在Java中使用IK分词器进行查询,你需要进行以下步骤: 1. 添加IK分词器依赖项:首先,在你的Java项目中添加IK分词器的依赖项。你可以从GitHub上找到IK分词器的源代码,并将其作为一个Maven或Gradle项目导入到你的项目中。 2. 创建Elasticsearch客户端:按照上述步骤创建Elasticsearch客户端实例。 3. 创建搜索请求和分词器设置:创建一个搜索请求,并设置使用IK分词器进行搜索。以下是一个示例: ```java SearchRequest searchRequest = new SearchRequest("your_index"); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); searchSourceBuilder.query(QueryBuilders.matchQuery("your_field", "your_search_text").analyzer("ik_max_word")); searchRequest.source(searchSourceBuilder); ``` 在上面的示例中,我们使用`matchQuery`来构建一个匹配查询,并使用`analyzer`方法将分词器设置为`ik_max_word`。你可以根据需要选择不同的IK分词器(例如`ik_smart`或其他自定义IK分词器)。 4. 执行搜索请求:使用客户端执行搜索请求,并处理搜索结果。以下是一个示例: ```java SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT); SearchHits hits = response.getHits(); for (SearchHit hit : hits.getHits()) { String sourceAsString = hit.getSourceAsString(); // 处理搜索到的文档数据 } ``` 在上面的示例中,我们通过调用`client.search`方法来执行搜索请求,并使用`getHits`方法获取搜索结果的列表。然后,我们可以遍历搜索结果,并处理每个搜索命中的文档数据。 请注意,以上示例是一个简单的示例,你可能需要根据你的具体需求进行更多的配置和操作。确保已经安装并配置了IK分词器,并且已经创建了相应的索引和映射。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值