9300与9200区别:
9300端口:ES节点之间通讯使用
9200端口:ES节点和外部通讯使用
9300是TGP协议端口号,ES集群之间通讯端口号
9200端口号,暴露 ES RESTful接口端口号
Dsl语言查询与过滤
什么是DSL语言
es中的查询请求有两种方式,一种是简易版的查询,另外一种是使用JSON完整的请求体叫做结构化查询(DSL)。
由于DSL查询更为直观也更为简易,所以大都使用这种方式。
DSL查询是POST过去一个json,由于post的请求是json格式的,所以存在很多灵活性,也有很多形式。
###term 查询是精确匹配
GET /mymayikt/user/_search
{
"query": {
"term": {
"name": "xiaohong"
}
}
}
#like match 支持分词查询
GET /mymayikt/user/_search
{
"from": 0,
"size": 1,
"query": {
"match": {
"car": "奥迪"
}
}
}
Term与 Match区别:
Term查询不会对字段进行分词查询,会采用精确匹配。
Match会根据该字段的分词器,进行分词查询。
通过Analyzer进行分词
- standard 默认分词器,按词切分、小写处理
- simple 按照非字母切分,非字母的都排除出去、小写处理
- whitespace 按照空格切分
- stop 与simple相比 多了stop filter 会把 the,a,is等修饰符去掉
- keyword 不分词
- pattern 通过正则表达式进行分词,默认是\W+(非字符的符号进行分隔)
中文分词器
因为 Elasticsearch中默认的标准分词器分词器对中文分词不是很友好,会将中文词语拆分成一个一个中文的汉字。因此引入中文分词器-es-ik插件
官方网站下载https://github.com/medcl/elasticsearch-analysis-ik/releases
注意:es-ik分词插件版本一定要和es安装的版本对应
第一步:下载es的IK插件
第二步:上传到/usr/share/elasticsearch/plugins/ik/ 然后使用unzip命令解压
第三步:重启 elasticsearch即可
未使用中文分词器时
返回结果:默认将中文词语拆分成一个一个中文的汉字
使用中文分词器:请求及结果:
自定义扩展字典
在/usr/share/elasticsearch/plugins/ik/config/目录下,创建dic文件
vi new_word.dic
马云
王者荣耀
公式相声xxx
修改vi IKAnalyzer.cfg.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>IK Analyzer 扩展配置</comment>
<!--用户可以在这里配置自己的扩展字典 -->
<entry key="ext_dict">new_word.dic</entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords"></entry>
<!--用户可以在这里配置远程扩展字典 -->
<!-- <entry key="remote_ext_dict">words_location</entry> -->
<!--用户可以在这里配置远程扩展停止词字典-->
<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>
修改后重启elasticsearch
查询结果: