开发者学堂课程【ElasticSearch 入门精讲:必要性详解】学习笔记,与课程紧密连接,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/631/detail/10011
必要性详解
内容介绍:
一、讲义
二、演示
一、讲义
先不安装任何中文分词的插件,使用 termQuery 查询,看能否查询到需要的结果。
新建索引库 ok
##添加数据
curl-H'Content-Type:application/json'-XPOST
http://JANSON01
:9200
/ok/news/1 -d'{"content":"美国留给伊拉克的是个烂摊子吗"}'
curl -H 'Content-Type:application/json' -XPOST
http://JANSON01:9200
/ok/news/2
-d {"content":公安部:各地校车将享最高路权"}'
curl-H'Content-Type:application/json'-XPOST
http://JANSON01:9200
/ok/news/3 -d'{"content ":中韩渔警冲突调查:韩警平均每天扣1艘中国渔船"}'
curl-H'Content-Type:application/json'-XPOST
http://JANSON01:9200
/ok/news/4 -d {"content":"中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"}'
二、演示
打开插件,点击索引,新建索引 ok
建好之后,往 ok 这个索引库里添加数据
打开客户端 FinalShell,连接一下
然后粘贴以上代码,回车,然后通过客户端浏览数据,先刷新,看到有一个 ok 的索引库,里面有一个 news 的 type,有加进去的数据。
检索一下,在 TestES.java 中输入
/**
*测试中文分词插件(没有安装中文分词插件的情形)
*<p>
*查询 ok 索引库中 type 之 news 中的字段 content 中包含有中的索引信息
*发现: 可以单独查询出包含个别字的索引信息,但是:若是词,查询失败。如:中国。
*原因: 默认的分词法中,认为一个汉字是一个词
*/
@Test
public void testChinesePlugin() {
SearchResponseresponse= client.prepareSearch( ...indices:"ok")
.setTypes("news")
.setQuery(QueryBuilders.termQuery(name:"content", value:"中"))
.get();
for (SearchHit hit : response.getHits()) {
System.out.println(hit.getSourceAsString());
}
}
运行结果显示:
{“content”: “中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首”}
{“content”: “中韩渔警冲突调查:韩警平均每天扣1艘中国渔船”}
但是中国能不能查询出来呢?试着修改代码
.setQuery(QueryBuilders.termQuery(name:"content", value:"中国"))
查询不出结果,这里就强调安装中文分词插件的重要性