不得不夸奖一下ES的周边资源,比如这个IK分词器,紧跟ES的版本,卢本伟牛逼!另外ES更新太快了吧,几乎不到半个月一个小版本就发布了!!目前已经发了6.5.2,估计我还没怎么玩就到7.0了。
下载
分词器:GitHub
点击release,下载对应的版本,他这个跟ES是一一对应的。
安装
他这个安装非常容易!业界良心啊!!
第一步:在elasticsearch-6.5.0主目录下的plugins目录新建一个ik文件夹
第二步:把从GitHub下载下来的压缩包解压到这个文件夹
启动
进入ES主目录
[E:\elasticsearch-6.5.0]$ .\bin\elasticsearch.bat
准备数据
依赖:
扫描二维码关注公众号,回复:
4450861 查看本文章
<dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.11.1</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-to-slf4j</artifactId> <version>2.11.1</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.25</version> </dependency> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-client</artifactId> <version>6.5.0</version> </dependency> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>6.5.0</version> </dependency>
代码:
/** * 创建索引 * @return * @throws IOException */ public static RestHighLevelClient createIndexForIk() throws IOException { RestHighLevelClient client = RestClientFactory.getInstance().getClient(); CreateIndexRequest request = new CreateIndexRequest("test_ik_index"); request.settings(Settings.builder() .put("index.number_of_shards", 1) .put("index.number_of_replicas", 1)) // 设置mapping .mapping("social", "content1","type=text", "content2", "type=text,analyzer=ik_smart","content3", "type=text,analyzer=ik_max_word") // 创建超时 .timeout(TimeValue.timeValueMinutes(2)) // 连接到主节点超时时间 .masterNodeTimeout(TimeValue.timeValueMinutes(1)); CreateIndexResponse indexResponse = client.indices().create(request, RequestOptions.DEFAULT); boolean acknowledged = indexResponse.isAcknowledged(); boolean shardsAcknowledged = indexResponse.isShardsAcknowledged(); System.out.println(acknowledged + "," + shardsAcknowledged); return client; } /** * 准备数据 * @return * @throws IOException */ public static RestHighLevelClient bulkAddForIk() throws IOException { RestHighLevelClient client = RestClientFactory.getInstance().getClient(); BulkRequest request = new BulkRequest(); request.add(new IndexRequest("test_ik_index", "social", "1") .source(XContentType.JSON,"content1", "富强、民主、文明、和谐,自由、平等、公正、法治,爱国、敬业、诚信、友善", "content2", "“富强、民主、文明、和谐”,是我国社会主义现代化国家的建设目标,也是从价值目标层面对社会主义核心价值观基本理念的凝练,在社会主义核心价值观中居于最高层次,对其他层次的价值理念具有统领作用", "content3", "富强、民主、文明、和谐,自由、平等、公正、法治,爱国、敬业、诚信、友善")); request.add(new IndexRequest("test_ik_index", "social", "2") .source(XContentType.JSON,"content1", "以热爱祖国为荣,以危害祖国为耻", "content2", "1978年12月,党的十一届三中全会重新恢复和确立了实事求是的思想路线,坚持把马克思主义与改革开放和我国社会主义建设伟大实践相结合,科学继承了***思想,创立了邓小平理论、“三个代表”重要思想、科学发展观等马克思主义中国化最新成果,马克思主义在意识形态领域的指导地位不断巩固", "content3", "“自由、平等、公正、法治”,是对美好社会的生动表述,也是从社会层面对社会主义核心价值观基本理念的凝练")); request.add(new IndexRequest("test_ik_index", "social", "3") .source(XContentType.JSON,"content1", "以服务人民为荣,以背离人民为耻", "content2", "新中国的建立,确立了以社会主义基本政治制度、基本经济制度的确立和以马克思主义为指导思想的社会主义意识形态,为社会主义核心价值体系建设奠定了政治前提、物质基础和文化条件", "content3", "“爱国、敬业、诚信、友善”,是公民基本道德规范,是从个人行为层面对社会主义核心价值观基本理念的凝练")); BulkResponse bulk = client.bulk(request, RequestOptions.DEFAULT); System.out.println("Status:" + bulk.status().name() + ",hasFailures:" + bulk.hasFailures()); MultiGetRequest multiGetRequest = new MultiGetRequest() .add(new MultiGetRequest.Item("test_ik_index", "social", "1")) .add(new MultiGetRequest.Item("test_ik_index", "social", "2")) .add(new MultiGetRequest.Item("test_ik_index", "social", "3")); MultiGetResponse response = client.mget(multiGetRequest, RequestOptions.DEFAULT); MultiGetItemResponse[] itemResponses = response.getResponses(); for(MultiGetItemResponse r : itemResponses){ System.out.println(r.getResponse().getSourceAsString()); } return client; }
执行
public static void main(String[] args) throws IOException, ExecutionException, InterruptedException { createIndexForIk().close(); bulkAddForIk().close(); }
我有三个字段:content1--用的默认分词器;content2:用的ik_smart;content3:用的ik_max_word
测试(在Kibana控制台里)
第一个查询:(可见默认的没有正确分词,看highlight字段)
GET /test_ik_index/_search { "query" : { "match": { "content1": "中国" } }, "highlight" : { "pre_tags" : ["<tag1>"], "post_tags" : ["</tag1>"], "fields" : { "content1": {} } } } ------------------------------- { "took" : 3, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : 2, "max_score" : 0.68320733, "hits" : [ { "_index" : "test_ik_index", "_type" : "social", "_id" : "2", "_score" : 0.68320733, "_source" : { "content1" : "以热爱祖国为荣,以危害祖国为耻", "content2" : "1978年12月,党的十一届三中全会重新恢复和确立了实事求是的思想路线,坚持把马克思主义与改革开放和我国社会主义建设伟大实践相结合,科学继承了***思想,创立了邓小平理论、“三个代表”重要思想、科学发展观等马克思主义中国化最新成果,马克思主义在意识形态领域的指导地位不断巩固", "content3" : "“自由、平等、公正、法治”,是对美好社会的生动表述,也是从社会层面对社会主义核心价值观基本理念的凝练" }, "highlight" : { "content1" : [ "以热爱祖<tag1>国</tag1>为荣,以危害祖<tag1>国</tag1>为耻" ] } }, { "_index" : "test_ik_index", "_type" : "social", "_id" : "1", "_score" : 0.40610588, "_source" : { "content1" : "富强、民主、文明、和谐,自由、平等、公正、法治,爱国、敬业、诚信、友善", "content2" : "“富强、民主、文明、和谐”,是我国社会主义现代化国家的建设目标,也是从价值目标层面对社会主义核心价值观基本理念的凝练,在社会主义核心价值观中居于最高层次,对其他层次的价值理念具有统领作用", "content3" : "富强、民主、文明、和谐,自由、平等、公正、法治,爱国、敬业、诚信、友善" }, "highlight" : { "content1" : [ "富强、民主、文明、和谐,自由、平等、公正、法治,爱<tag1>国</tag1>、敬业、诚信、友善" ] } } ] } }
第二个:(ok)
GET /test_ik_index/_search { "query" : { "match": { "content2": "马克思主义" } }, "highlight" : { "pre_tags" : ["<tag1>"], "post_tags" : ["</tag1>"], "fields" : { "content2": {} } } } ------------------------------- { "took" : 6, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : 2, "max_score" : 0.71390307, "hits" : [ { "_index" : "test_ik_index", "_type" : "social", "_id" : "2", "_score" : 0.71390307, "_source" : { "content1" : "以热爱祖国为荣,以危害祖国为耻", "content2" : "1978年12月,党的十一届三中全会重新恢复和确立了实事求是的思想路线,坚持把马克思主义与改革开放和我国社会主义建设伟大实践相结合,科学继承了***思想,创立了邓小平理论、“三个代表”重要思想、科学发展观等马克思主义中国化最新成果,马克思主义在意识形态领域的指导地位不断巩固", "content3" : "“自由、平等、公正、法治”,是对美好社会的生动表述,也是从社会层面对社会主义核心价值观基本理念的凝练" }, "highlight" : { "content2" : [ "1978年12月,党的十一届三中全会重新恢复和确立了实事求是的思想路线,坚持把<tag1>马克思主义</tag1>与改革开放和我国社会主义建设伟大实践相结合,科学继承了***思想,创立了邓小平理论、“三个代表”重要思想、科学发展观等<tag1>马克思主义</tag1>中国化最新成果", ",<tag1>马克思主义</tag1>在意识形态领域的指导地位不断巩固" ] } }, { "_index" : "test_ik_index", "_type" : "social", "_id" : "3", "_score" : 0.50678647, "_source" : { "content1" : "以服务人民为荣,以背离人民为耻", "content2" : "新中国的建立,确立了以社会主义基本政治制度、基本经济制度的确立和以马克思主义为指导思想的社会主义意识形态,为社会主义核心价值体系建设奠定了政治前提、物质基础和文化条件", "content3" : "“爱国、敬业、诚信、友善”,是公民基本道德规范,是从个人行为层面对社会主义核心价值观基本理念的凝练" }, "highlight" : { "content2" : [ "新中国的建立,确立了以社会主义基本政治制度、基本经济制度的确立和以<tag1>马克思主义</tag1>为指导思想的社会主义意识形态,为社会主义核心价值体系建设奠定了政治前提、物质基础和文化条件" ] } } ] } }
第三个:(ok)
GET /test_ik_index/_search { "query" : { "match": { "content3": "富强" } }, "highlight" : { "pre_tags" : ["<tag1>"], "post_tags" : ["</tag1>"], "fields" : { "content3" : {} } } } ----------------------------------- { "took" : 2, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : 1, "max_score" : 1.2146692, "hits" : [ { "_index" : "test_ik_index", "_type" : "social", "_id" : "1", "_score" : 1.2146692, "_source" : { "content1" : "富强、民主、文明、和谐,自由、平等、公正、法治,爱国、敬业、诚信、友善", "content2" : "“富强、民主、文明、和谐”,是我国社会主义现代化国家的建设目标,也是从价值目标层面对社会主义核心价值观基本理念的凝练,在社会主义核心价值观中居于最高层次,对其他层次的价值理念具有统领作用", "content3" : "富强、民主、文明、和谐,自由、平等、公正、法治,爱国、敬业、诚信、友善" }, "highlight" : { "content3" : [ "<tag1>富强</tag1>、民主、文明、和谐,自由、平等、公正、法治,爱国、敬业、诚信、友善" ] } } ] } }
到此为止,分词器安装完毕
小插曲:文本有***不让发布。。。。