在Spring 中使用elasticsearch 中的IK分词器,分词时至少两个汉字,如何设置
时间: 2024-02-16 13:04:48 浏览: 141
Elasticsearch中ik分词器
在Spring中使用elasticsearch中的IK分词器,可以通过在mapping中指定分词器来实现。
假设你的索引名称为`index`,类型名称为`type`,需要对`content`字段进行分词,可以按照如下步骤进行设置:
1. 创建索引
```java
CreateIndexRequest request = new CreateIndexRequest("index");
client.indices().create(request, RequestOptions.DEFAULT);
```
2. 创建mapping
```java
PutMappingRequest request = new PutMappingRequest("index");
request.type("type");
Map<String, Object> properties = new HashMap<>();
Map<String, Object> content = new HashMap<>();
content.put("type", "text");
Map<String, Object> analyzer = new HashMap<>();
analyzer.put("analyzer", "ik_max_word");
analyzer.put("search_analyzer", "ik_smart");
content.put("analyzer", analyzer);
properties.put("content", content);
request.source(properties);
client.indices().putMapping(request, RequestOptions.DEFAULT);
```
在上面的代码中,`analyzer`指定了分词器为`ik_max_word`,表示最大化地进行分词。`search_analyzer`指定了搜索时使用的分词器为`ik_smart`,表示根据语境智能地进行分词。
3. 插入数据
```java
IndexRequest request = new IndexRequest("index", "type", "1");
Map<String, Object> data = new HashMap<>();
data.put("content", "这是一段测试文本");
request.source(data);
client.index(request, RequestOptions.DEFAULT);
```
在插入数据时,`content`字段的值为`这是一段测试文本`,会被分成`这是`、`一段`、`测试`、`文本`四个词。
4. 搜索数据
```java
SearchRequest request = new SearchRequest("index");
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.query(QueryBuilders.matchQuery("content", "测试文本"));
request.source(builder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
```
在搜索数据时,搜索关键词为`测试文本`,会被分成`测试`、`文本`两个词,会匹配到之前插入的数据。
需要注意的是,如果要设置分词时至少两个汉字,则可以在`ik_max_word`分词器中进行设置,具体可以参考IK分词器的官方文档。
阅读全文