Java开发中的Elasticsearch分词器的定义与用法一

在这里插入图片描述
Java开发中无论是内置的分析器(analyzer),还是自定义的分析器(analyzer),都由三种构件块组成的:character filters , tokenizers , token filters。
内置的analyzer将这些构建块预先打包到适合不同语言和文本类型的analyzer中。Character filters (字符过滤器)字符过滤器以字符流的形式接收原始文本,并可以通过添加、删除或更改字符来转换该流。
举例来说,一个字符过滤器可以用来把阿拉伯数字(٠‎١٢٣٤٥٦٧٨‎٩)‎转成成Arabic-Latin的等价物(0123456789)。
一个分析器可能有0个或多个字符过滤器,它们按顺序应用。
(PS:类似Servlet中的过滤器,或者拦截器,想象一下有一个过滤器链)Tokenizer (分词器)一个分词器接收一个字符流,并将其拆分成单个token (通常是单个单词),并输出一个token流。例如,一个whitespace分词器当它看到空白的时候就会将文本拆分成token。
它会将文本“Quick brown fox!”转换为[Quick, brown, fox!](PS:Tokenizer 负责将文本拆分成单个token ,这里token就指的就是一个一个的单词。就是一段文本被分割成好几部分,相当于Java中的字符串的 split )分词器还负责记录每个term的顺序或位置,以及该term所表示的原单词的开始和结束字符偏移量。
(PS:文本被分词后的输出是一个term数组)一个分析器必须只能有一个分词器Token filters (token过滤器)token过滤器接收token流,并且可能会添加、删除或更改tokens。
例如,一个lowercase token filter可以将所有的token转成小写。stop token filter可以删除常用的单词,比如 the 。
synonym token filter可以将同义词引入token流。
不允许token过滤器更改每个token的位置或字符偏移量。一个分析器可能有0个或多个token过滤器,它们按顺序应用。
小结&回顾analyzer(分析器)是一个包,这个包由三部分组成,分别是:character filters (字符过滤器)、tokenizer(分词器)、token filters(token过滤器)一个analyzer可以有0个或多个character filters一个analyzer有且只能有一个tokenizer一个analyzer可以有0个或多个token filterscharacter filter 是做字符转换的,它接收的是文本字符流,输出也是字符流tokenizer 是做分词的,它接收字符流,输出token流(文本拆分后变成一个一个单词,这些单词叫token)token filter 是做token过滤的,它接收token流,输出也是token流由此可见,整个analyzer要做的事情就是将文本拆分成单个单词,文本 ----> 字符 ----> token
在这里插入图片描述
这就好比是拦截器
在这里插入图片描述
在这里插入图片描述
文章来自:https://www.itjmd.com/news/show-5316.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Elasticsearch 创建映射时,可以通过指定字段的分词器来将其设置为 HanLP 分词器。以下是一个示例代码: ```java import org.elasticsearch.action.admin.indices.create.CreateIndexRequest; import org.elasticsearch.action.admin.indices.create.CreateIndexResponse; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentFactory; import java.io.IOException; // 创建映射的方法 public void createMapping(String indexName, RestHighLevelClient client) throws IOException { CreateIndexRequest request = new CreateIndexRequest(indexName); request.settings(Settings.builder() .put("index.number_of_shards", 1) .put("index.number_of_replicas", 0) ); XContentBuilder mapping = XContentFactory.jsonBuilder() .startObject() .startObject("properties") .startObject("field1") .field("type", "text") .field("analyzer", "hanlp") .endObject() .startObject("field2") .field("type", "keyword") .endObject() // 添加其他字段映射 .endObject() .endObject(); request.mapping(mapping); CreateIndexResponse response = client.indices().create(request, RequestOptions.DEFAULT); boolean acknowledged = response.isAcknowledged(); boolean shardsAcknowledged = response.isShardsAcknowledged(); if (acknowledged && shardsAcknowledged) { System.out.println("索引创建成功!"); } else { System.out.println("索引创建失败!"); } } ``` 在上述示例代码,我们使用 `XContentBuilder` 构建映射的 JSON 内容,并在 `field1` 字段的映射指定了 `analyzer` 为 "hanlp"。这样就将该字段的分词器设置为 HanLP 分词器。 请注意,上述示例仅针对单个字段设置了分词器。如果需要为其他字段设置 HanLP 分词器,可以按照相同的方式在映射定义添加相应的字段映射。 确保您已经正确添加了 HanLP 的依赖,并且 Elasticsearch 已经正确配置了 HanLP 分词器
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值