初步检索_cat
GET _cat/nodes 查看所有节点
GET _cat/health 查看es健康状态
GET _cat/master 查看主节点
GET _cat/indices 查看所有索引
索引
创建索引/put
[put] [http://127.0.0.1:9200/shop](http://127.0.0.1:9200/shop)
查看索引/get
[get] [http://127.0.0.1:9200/shop](http://127.0.0.1:9200/shop)
索引不能重复创建
删除索引/delete
[delete] [http://127.0.0.1:9200/shop](http://127.0.0.1:9200/shop)
查看所有索引
[get] [http://127.0.0.1:9200/_cat/indices/?v](http://127.0.0.1:9200/_cat/indices/?v)
文档
创建文档/post/put
指定id [post/put] [http://localhost:9200/shop/_create/1003](http://localhost:9200/shop/_create/1003) [http://localhost:9200/shop/_doc/1003](http://localhost:9200/shop/_create/1003)
随机id [post] [http://localhost:9200/shop/_](http://localhost:9200/shop/_create)create [http://localhost:9200/shop/_doc](http://localhost:9200/shop/_doc)
这里只能使用post请求不能使用put请求,因为每次创建一个文档都会返回一个随机的id(由es创建的),所以这个请求不是幂等性的,而put请求要求必须是幂等性的,post则没有此要求,是不是幂等性都可以
如果请求中自定义id,那么每次返回的结果中id都是不变的,这样就符合幂等性,因此post或put都可以
【post】
【put】
【put】
【post】
把_doc换成_create也同样可以创建文档
查看全部文档
[get] [http://localhost:9200/shop/](http://localhost:9200/shop/)_search
查看单条文档根据id
[get] [http://localhost:9200/shop/_doc/1001](http://localhost:9200/shop/_doc/1001)
全量更新=覆盖put/post
[put/post] [http://localhost:9200/shop/_doc/100](http://localhost:9200/shop/_doc/1003)1
其实相当于新增了一条指定id的文档,因为这条id已经存在,所以会更新原来的
局部更新/post
[post] [http://localhost:9200/shop/_update/1001](http://localhost:9200/shop/_update/1001)
删除文档
[delete] [http://localhost:9200/shop/_doc/1001](http://localhost:9200/shop/_doc/1001)
根据查询条件删除
http://localhost:9200/hotfix/`_delete_by_query`
进阶查询
es真正的核心是查询
条件查询
[http://localhost:9200/shop/_search?q=category:](http://localhost:9200/shop/_search?q=category:)苹果
在请求路径中添加参数是很麻烦的,且中文容易乱码,因此在请求体中写参数
[get] http://localhost:9200/shop/_search
{
"query": {
"match": {
"category": "华为"
}
}
}
请求体中的全量查询
分页查询
[post] http://localhost:9200/shop/_search
{
"query": {
"match_all": {
}
},
"from": 0,
"size": 2
}
只展示指定字段
[post] http://localhost:9200/shop/_search
{
"query": {
"match_all": {
}
},
"from": 0,
"size": 2,
"_source":["title","category"]
}
排序查询
{
"query": {
"match_all": {}
},
"from": 0,
"size": 5,
"_source": [
"title",
"category"
],
"sort": [
{
"price": {
"order": "desc" // 降序 desc 升序 asc
}
}
]
}
多条件查询(同时成立)
{
"query": {
"bool": {
"must": [
{
"match": {
"category": "小米"
}
},
{
"match": {
"price": 5199.0
}
}
]
}
}
}
多条件查询(或者)
{
"query": {
"bool": {
"should": [
{
"match": {
"category": "苹果"
}
},
{
"match": {
"category": "华为"
}
}
]
}
}
}
多条件范围查询
{
"query": {
"bool": {
"should": [
{
"match": {
"category": "小米"
}
},
{
"match": {
"category": "华为"
}
}
],
"filter": [
{
"range": {
"price": {
"gte": 5000,
"lte": 5500
}
}
}
]
}
}
}
完全匹配查询
正常情况下,都是会分词查询的,也就是说输入“小华”,会自动拆分成“小”和“华”,就会查出所有小米和华为的数据,但是有时候我不想让它分词,就想让它只查出“小华”,此时就是完全匹配
http://localhost:9200/shop/_search
{
"query":{
"match_phrase":{
"category":"小华"
}
}
}
高亮查询
http://localhost:9200/shop/_search
{
"query": {
"match_phrase": {
"category": "小华"
}
},
"highlight": {
"fields": {
"category": {}
}
}
}
聚合查询
// 分组查询
{
"aggs": {//聚合操作
"price_group": {
"terms": {
"field": "price"
}
}
},
"size": 0 // 不显示原始数据
}
// 平均值
{
"aggs": {
"price_avg": {
"avg": {
"field": "price"
}
}
},
"size": 0
}
映射
创建映射
[put] http://localhost:9200/user/_mapping
// 创建映射对应着MySQL里创建表结构,此索引里有三个字段name,sex,tel
{
"properties": {
"name": {
"type": "text", // 文本类型,可以被分词
"index": true // 可以被索引到
},
"sex": {
"type": "keyword", // 关键字,不可以被分词
"index": true
},
"tel": {
"type": "keyword",
"index": false // 不能被索引到
}
}
}
查询映射
[get] [http://localhost:9200/user/_mapping](http://localhost:9200/user/_mapping)
映射关系
先查询索引全部文档
根据name查询,name的类型是text,所以会被分词
根据sex查询,sex的类型是keyword,所以不会被分词,只会精确查找
查询sex是女,只会查出来是sex=女,不会查出来女的,女性等包含女字的
index设置为false,代表不能根据这个字段被查询到
JavaAPI
创建索引
// 创建ES客户端
RestHighLevelClient restHighLevelClient = new RestHighLevelClient(
RestClient.builder(new HttpHost("106.14.42.235", 9200, "http"))
);
// 创建索引
CreateIndexRequest user = new CreateIndexRequest("user");
CreateIndexResponse createIndexResponse = restHighLevelClient.indices().create(user, RequestOptions.DEFAULT);
// 响应状态
boolean acknowledged = createIndexResponse.isAcknowledged();
System.out.println("创建索引:"+acknowledged);
restHighLevelClient.close();
查询索引
// 创建ES客户端
RestHighLevelClient restHighLevelClient = new RestHighLevelClient(
RestClient.builder(new HttpHost("106.14.42.235", 9200, "http"))
);
// 查询索引
GetIndexRequest user = new GetIndexRequest("user");
GetIndexResponse getIndexResponse = restHighLevelClient.indices().get(user, RequestOptions.DEFAULT);
// 响应结果
// 索引别名
Map<String, List<AliasMetadata>> aliases = getIndexResponse.getAliases();
// 索引映射
Map<String, MappingMetadata> mappings = getIndexResponse.getMappings();
// 索引设置
Map<String, Settings> settings = getIndexResponse.getSettings();
System.out.println(aliases);
System.out.println(mappings);
System.out.println(settings);
// 关闭连接
restHighLevelClient.close();
删除索引
// 创建ES客户端
RestHighLevelClient restHighLevelClient = new RestHighLevelClient(
RestClient.builder(new HttpHost("106.14.42.235", 9200, "http"))
);
// 删除索引
DeleteIndexRequest user = new DeleteIndexRequest("user");
AcknowledgedResponse delete = restHighLevelClient.indices().delete(user, RequestOptions.DEFAULT);
// 响应结果
boolean acknowledged = delete.isAcknowledged();
System.out.println(acknowledged);
// 关闭连接
restHighLevelClient.close();
创建文档
RestHighLevelClient restHighLevelClient = new RestHighLevelClient(
RestClient.builder(new HttpHost("106.14.42.235", 9200, "http")));
// 初始化请求参数
IndexRequest indexRequest = new IndexRequest();
// 定义索引名,文档ID
indexRequest.index("user").id("100001");
// 准备一个json格式的字符串作为文档内容
User user = new User("安迪","男",25);
String userJsonString = JSON.toJSONString(user);
// 定义数据源并规定格式为json格式
indexRequest.source(userJsonString,XContentType.JSON);
IndexResponse indexResponse = restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);
System.out.println(indexResponse.getResult());
restHighLevelClient.close();
修改文档局部
RestHighLevelClient restHighLevelClient = new RestHighLevelClient(
RestClient.builder(new HttpHost("106.14.42.235", 9200, "http")));
// 初始化修改的请求参数
UpdateRequest updateRequest = new UpdateRequest();
// 定义要修改的索引名,文档ID
updateRequest.index("user").id("100001");
updateRequest.doc(XContentType.JSON,"name","马林");
UpdateResponse update = restHighLevelClient.update(updateRequest, RequestOptions.DEFAULT);
System.out.println(update);
restHighLevelClient.close();
查看文档
// 初始化修改的请求参数
GetRequest getRequest = new GetRequest();
// 定义要查看的索引名,文档ID
getRequest.index("user").id("100001");
GetResponse getResponse = restHighLevelClient.get(getRequest, RequestOptions.DEFAULT);
System.out.println(getResponse);
restHighLevelClient.close();
删除文档
RestHighLevelClient restHighLevelClient = new RestHighLevelClient(
RestClient.builder(new HttpHost("106.14.42.235", 9200, "http")));
// 初始化删除的请求参数
DeleteRequest deleteRequest = new DeleteRequest();
// 定义要删除的索引名,文档ID
deleteRequest.index("user").id("100001");
DeleteResponse delete = restHighLevelClient.delete(deleteRequest, RequestOptions.DEFAULT);
System.out.println(delete);
restHighLevelClient.close();
批量新增
// 第一种写法
// 创建ES客户端
RestHighLevelClient restHighLevelClient = new RestHighLevelClient(
RestClient.builder(new HttpHost("106.14.42.235", 9200, "http"))
);
BulkRequest bulkRequest = new BulkRequest();
bulkRequest.add(new IndexRequest().index("user").source(XContentType.JSON,"name", "张三", "age","18", "sex", "man"));
bulkRequest.add(new IndexRequest().index("user").source(XContentType.JSON,"name", "李四", "age","19", "sex", "man"));
bulkRequest.add(new IndexRequest().index("user").source(XContentType.JSON,"name", "王五", "age","17", "sex", "man"));
BulkResponse bulk = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
System.out.println(bulk.getTook());
System.out.println(bulk.getItems());
// 关闭连接
restHighLevelClient.close();
// 第二种写法
// 创建ES客户端
RestHighLevelClient restHighLevelClient = new RestHighLevelClient(
RestClient.builder(new HttpHost("106.14.42.235", 9200, "http"))
);
User user1 = new User("小红", "女的", 11);
User user2 = new User("小李", "男的", 12);
User user3 = new User("小刚", "男的", 13);
BulkRequest bulkRequest = new BulkRequest();
bulkRequest.add(new IndexRequest().index("user").source(JSON.toJSONString(user1), XContentType.JSON));
bulkRequest.add(new IndexRequest().index("user").source(JSON.toJSONString(user2), XContentType.JSON));
bulkRequest.add(new IndexRequest().index("user").source(JSON.toJSONString(user3), XContentType.JSON));
BulkResponse bulk = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
System.out.println(bulk.getTook());
System.out.println(bulk.getItems());
// 关闭连接
restHighLevelClient.close();
批量删除
// 创建ES客户端
RestHighLevelClient restHighLevelClient = new RestHighLevelClient(
RestClient.builder(new HttpHost("106.14.42.235", 9200, "http"))
);
BulkRequest bulkRequest = new BulkRequest();
bulkRequest.add(new DeleteRequest().index("user").id("10101"));
bulkRequest.add(new DeleteRequest().index("user").id("10102"));
bulkRequest.add(new DeleteRequest().index("user").id("10103"));
BulkResponse bulk = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
System.out.println(bulk.getTook());
System.out.println(bulk.getItems());
// 关闭连接
restHighLevelClient.close();
全量查询
// 创建ES客户端
RestHighLevelClient restHighLevelClient = new RestHighLevelClient(
RestClient.builder(new HttpHost("106.14.42.235", 9200, "http"))
);
SearchRequest searchRequest = new SearchRequest();
// 定义查询索引
searchRequest.indices("user");
// 定义查询条件 全量查询
searchRequest.source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()));
// 执行查询
SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
SearchHits hits = search.getHits();
System.out.println(hits.getTotalHits());
System.out.println(search.getTook());
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
}
// 关闭连接
restHighLevelClient.close();
条件查询
// 创建ES客户端
RestHighLevelClient restHighLevelClient = new RestHighLevelClient(
RestClient.builder(new HttpHost("106.14.42.235", 9200, "http"))
);
SearchRequest searchRequest = new SearchRequest();
// 定义查询索引
searchRequest.indices("user");
// 定义查询条件 sex=man
searchRequest.source(new SearchSourceBuilder().query(QueryBuilders.termQuery("sex","man")));
//
SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
SearchHits hits = search.getHits();
System.out.println(hits.getTotalHits());
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
}
// 关闭连接
restHighLevelClient.close();
分页查询
// 创建ES客户端
RestHighLevelClient restHighLevelClient = new RestHighLevelClient(
RestClient.builder(new HttpHost("106.14.42.235", 9200, "http"))
);
SearchRequest searchRequest = new SearchRequest();
// 定义查询索引
searchRequest.indices("user");
// 定义查询条件 全量查询
SearchSourceBuilder query = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
// 定义查询条件 分页查询 第3页 每页4条数据 from的值 =(当前页码-1)*页面尺寸
query.from(8);
query.size(4);
searchRequest.source(query);
//
SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
SearchHits hits = search.getHits();
System.out.println(hits.getTotalHits());
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
}
// 关闭连接
restHighLevelClient.close();
排序查询
// 创建ES客户端
RestHighLevelClient restHighLevelClient = new RestHighLevelClient(
RestClient.builder(new HttpHost("106.14.42.235", 9200, "http"))
);
SearchRequest searchRequest = new SearchRequest();
// 定义查询索引
searchRequest.indices("user");
// 定义查询条件 全量查询
SearchSourceBuilder query = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
// 定义查询条件 排序(倒序desc 正序asc)
query.sort("age", SortOrder.DESC);
searchRequest.source(query);
//
SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
SearchHits hits = search.getHits();
System.out.println(hits.getTotalHits());
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
}
// 关闭连接
restHighLevelClient.close();
过滤字段查询
// 创建ES客户端
RestHighLevelClient restHighLevelClient = new RestHighLevelClient(
RestClient.builder(new HttpHost("106.14.42.235", 9200, "http"))
);
SearchRequest searchRequest = new SearchRequest();
// 定义查询索引
searchRequest.indices("user");
// 定义查询条件 全量查询
SearchSourceBuilder query = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
// 定义查询条件 过滤字段 只显示规定字段(name age)
String[] includes = {"name","age"};
String[] excludes = {};
query.fetchSource(includes, excludes);
searchRequest.source(query);
//
SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
SearchHits hits = search.getHits();
System.out.println(hits.getTotalHits());
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
}
// 关闭连接
restHighLevelClient.close();
组合查询
// 同时满足多个条件
// 创建ES客户端
RestHighLevelClient restHighLevelClient = new RestHighLevelClient(
RestClient.builder(new HttpHost("106.14.42.235", 9200, "http"))
);
SearchRequest searchRequest = new SearchRequest();
// 定义查询索引
searchRequest.indices("user");
// 定义查询条件 全量查询
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
// 定义查询条件 组合查询 同时满足age=10 name=aaa
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(QueryBuilders.matchQuery("age","10"));
boolQueryBuilder.must(QueryBuilders.matchQuery("name","aaa"));
searchSourceBuilder.query(boolQueryBuilder);
searchRequest.source(searchSourceBuilder);
SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
SearchHits hits = search.getHits();
System.out.println(hits.getTotalHits());
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
}
// 关闭连接
restHighLevelClient.close();
// 满足多个条件之一
// 创建ES客户端
RestHighLevelClient restHighLevelClient = new RestHighLevelClient(
RestClient.builder(new HttpHost("106.14.42.235", 9200, "http"))
);
SearchRequest searchRequest = new SearchRequest();
// 定义查询索引
searchRequest.indices("user");
// 定义查询条件 全量查询
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
// 定义查询条件 组合查询 满足 age=10 age=15 之一
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.should(QueryBuilders.matchQuery("age","10"));
boolQueryBuilder.should(QueryBuilders.matchQuery("age","15"));
// 查询范围全量查询
searchSourceBuilder.query(QueryBuilders.matchAllQuery());
// 再加上组合查询
searchSourceBuilder.query(boolQueryBuilder);
searchRequest.source(searchSourceBuilder);
SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
SearchHits hits = search.getHits();
System.out.println(hits.getTotalHits());
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
}
// 关闭连接
restHighLevelClient.close();
范围查询
// 创建ES客户端
RestHighLevelClient restHighLevelClient = new RestHighLevelClient(
RestClient.builder(new HttpHost("106.14.42.235", 9200, "http"))
);
SearchRequest searchRequest = new SearchRequest();
// 定义查询索引
searchRequest.indices("user");
// 定义查询条件 全量查询
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
// 定义查询条件 范围查询 >=11 <20
RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("age");
rangeQueryBuilder.gte("11");
rangeQueryBuilder.lt("20");
// 查询范围全量查询
searchSourceBuilder.query(QueryBuilders.matchAllQuery());
// 再加上组合查询
searchSourceBuilder.query(rangeQueryBuilder);
searchRequest.source(searchSourceBuilder);
SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
SearchHits hits = search.getHits();
System.out.println(hits.getTotalHits());
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
}
// 关闭连接
restHighLevelClient.close();
模糊查询
// 创建ES客户端
RestHighLevelClient restHighLevelClient = new RestHighLevelClient(
RestClient.builder(new HttpHost("106.14.42.235", 9200, "http"))
);
SearchRequest searchRequest = new SearchRequest();
// 定义查询索引
searchRequest.indices("user");
// 定义查询条件
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
// 定义查询条件 模糊查询 name = ggg 或 与ggg只差两个字符的相似的
FuzzyQueryBuilder fuzziness = QueryBuilders.fuzzyQuery("name", "ggg").fuzziness(Fuzziness.TWO);
// 查询范围全量查询
searchSourceBuilder.query(QueryBuilders.matchAllQuery());
// 再加上模糊查询
searchSourceBuilder.query(fuzziness);
searchRequest.source(searchSourceBuilder);
SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
SearchHits hits = search.getHits();
System.out.println(hits.getTotalHits());
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
}
// 关闭连接
restHighLevelClient.close();
高亮查询
// 创建ES客户端
RestHighLevelClient restHighLevelClient = new RestHighLevelClient(
RestClient.builder(new HttpHost("106.14.42.235", 9200, "http"))
);
SearchRequest searchRequest = new SearchRequest();
// 定义查询索引
searchRequest.indices("user");
// 定义查询条件
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
// 定义查询条件
TermsQueryBuilder termsQueryBuilder = QueryBuilders.termsQuery("name", "ggg");
HighlightBuilder highlightBuilder = new HighlightBuilder();
highlightBuilder.preTags("<font color='red'>");
highlightBuilder.postTags("</font>");
highlightBuilder.field("name");
// 再加上高亮
searchSourceBuilder.query(termsQueryBuilder);
searchSourceBuilder.highlighter(highlightBuilder);
searchRequest.source(searchSourceBuilder);
SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
SearchHits hits = search.getHits();
System.out.println(hits);
for (SearchHit hit : hits) {
System.out.println(hit.getHighlightFields());
}
// 关闭连接
restHighLevelClient.close();
查询最大值
// 创建ES客户端
RestHighLevelClient restHighLevelClient = new RestHighLevelClient(
RestClient.builder(new HttpHost("106.14.42.235", 9200, "http"))
);
SearchRequest searchRequest = new SearchRequest();
// 定义查询索引
searchRequest.indices("user");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
// 定义最大值的字段和别名
MaxAggregationBuilder field = AggregationBuilders.max("maxAge").field("age");
searchSourceBuilder.aggregation(field);
searchRequest.source(searchSourceBuilder);
SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
restHighLevelClient.close();
分组查询
// 创建ES客户端
RestHighLevelClient restHighLevelClient = new RestHighLevelClient(
RestClient.builder(new HttpHost("106.14.42.235", 9200, "http"))
);
SearchRequest searchRequest = new SearchRequest();
// 定义查询索引
searchRequest.indices("user");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
// 定义分组字段和别名 按年龄分组
TermsAggregationBuilder field = AggregationBuilders.terms("groupAge").field("age");
searchSourceBuilder.aggregation(field);
searchRequest.source(searchSourceBuilder);
SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
for (SearchHit hit : search.getHits()) {
System.out.println(hit.getSourceAsString());
}
restHighLevelClient.close();
安装ik分词器
ik分词器版本应该和es版本一致,这里我选用7.14.2,es内置了很多分词器,但默认不支持中文分词,只支持英文分词,ik分词器可以进行中文分词
# 在plugins目录下下载ik分词器
wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.14.2/elasticsearch-analysis-ik-7.14.2.zip
# 在plugins目录下新建ik目录
mkdir ik
# 如果unzip命令未找到,则先下载unzip命令
yum install unzip
# 解压到ik目录下(-d 指定目录)
unzip -d ik elasticsearch-analysis-ik-7.14.2.zip
# 更改权限
chmod -R 777 ik/
# plugins目录下最好不要存放其他文件,只存放解压好的插件
# 进入es容器内部查看安装是否成功
docker exec -it elasticsearch /bin/bash
# 来到bin目录下,查看已安装插件列表
elasticsearch-plugin list
# 出现ik则说明安装插件成功
# 重启容器生效
docker restart elasticsearch
在线安装
root@1d4be2e987e9:/usr/share/elasticsearch/bin# ./elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v5.6.14/elasticsearch-analysis-ik-5.6.14.zip
检查ik分词器功能
检查ik分词器插件是否安装成功
ik_smart模式
ik_max_word
不用ik分词器,使用es内置的标准分词器效果如下
中文:
英文: