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即可

未使用中文分词器时

es 9200和9300 es 9200和9300端口区别_分词器

返回结果:默认将中文词语拆分成一个一个中文的汉字

es 9200和9300 es 9200和9300端口区别_端口号_02

使用中文分词器:请求及结果:

es 9200和9300 es 9200和9300端口区别_端口号_03

自定义扩展字典

在/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

查询结果:

es 9200和9300 es 9200和9300端口区别_端口号_04