当前位置:   article > 正文

ElasticSearch+kibana(以及ik)_kibana es 分词器ik语法

kibana es 分词器ik语法

目录

1.索引库

    1.mapping映射:

tepe:

字符串:

analyzer:

数值类型:

布尔:boolean

日期:date

对象:object

index:

properties:

2.ki分词器

ik分词器扩展

3.索引库:

(1)创建索引  

(2)查,删索引库

(3)修改索引库

4.文档操作

添加,删除,查询文档

修改文档(put)

5.es客户端(restclient)

1.使用步骤


说明:

  1. es搜索首先会对搜索词继续分词,按照词搜索;
  2. es是面向文档存储的,系列化为json格式存储在es中,
  3. 首先建立索引,文档的约束使用mapping映射约束,索引中对应多个文档,添加文档;
  4. MySQL和es的区别:MySQL有事务保证数据安全性,es为搜索而生;
  5. Docs

1.索引库

    1.mapping映射:

                索引库的约束,mapping常见的属性:

  1. tepe:

  2. 字符串:
    1. text 可分词的文本
    2. keyword:精确值;(比如国家,品牌等不可分)
  3. analyzer:

    1. 分词器,只有text需要分词,(ik_smart,ik_max_word);
  4. 数值类型
    1. long,integer,short,byte,double,float

  5. 布尔:boolean
  6. 日期:date
  7. 对象:object
  8. index:

    1. 是否创建索引(倒排索引,默认true)
  9. properties:

    1. 字段的子字段
  10. es和kibana路径是9200和5601;

2.ki分词器

docker exec -it es ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.1/elasticsearch-analysis-ik-7.12.1.zip
  1. POST /_analyze
  2. {
  3. "text":"我是在太原的晴天欧里给特别优秀的人加油",
  4. "analyzer":"ik_max_word"(ik_smart,ik_max_word)
  5. }
  1. ik分词器扩展

    1. 在IKAnalyzer.cfg.xml配置文件内容添加:

      1. <?xml version="1.0" encoding="UTF-8"?>
      2. <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
      3. <properties>
      4. <comment>IK Analyzer 扩展配置</comment>
      5. <!--用户可以在这里配置自己的扩展字典 *** 添加扩展词典-->
      6. <entry key="ext_dict">ext.dic</entry>
      7. <entry key="ext_stopwords">stopwords.dic</entry>
      8. </properties>
    2. 在IK分词器的config目录新建一个 ext.dic,可以参考config目录下复制一个配置文件进行修改

3.索引库:

(1)创建索引  

  1. PUT /heima
  2. {
  3. "mappings": {
  4. "properties": {
  5. "info":{
  6. "type": "text",
  7. "analyzer": "ik_max_word"
  8. },
  9. "emial":{
  10. "type": "keyword",
  11. "index": false
  12. }
  13. }
  14. }
  15. }

  1. index默认是true,false则为不参与搜索(比如说密码);

(2)查,删索引库

        GET /heima,delete / heima

(3)修改索引库

  1. es不允许修改索引库(会报404错误),但是可以添加mapping
    1. PUT /索引库名/_mapping
    2. {
    3. "properties": {
    4. "新字段名":{
    5. "type": "integer"
    6. }
    7. }
    8. }

4.文档操作

  1. 添加,删除,查询文档
    1. ,对应的是post,delete,get  /heima/_doc/1
      1. POST /heima/_doc/1
      2. {
      3. "info": "黑马程序员Java讲师",
      4. "email": "zy@itcast.cn",
      5. "name": {
      6. "firstName": "云",
      7. "lastName": "赵"
      8. }
      9. }

      添加文档一定要加上id,要不然es会随机生成一个id,一定要加_doc

  2. 修改文档(put)
    1. 全局修改和局部修改;
    2. 全修改会先删除再修改,如果不存在就相当于新增
      1. PUT /heima/_doc/1
      2. {
      3. "info": "黑马程序员高级Java讲师",
      4. "email": "zy@itcast.cn",
      5. "name": {
      6. "firstName": "云",
      7. "lastName": "赵"
      8. }
      9. }

    3. 局部修改是只修改指定id匹配的文档中的部分字段

      1. POST /heima/_update/1
      2. {
      3. "doc": {
      4. "email": "ZhaoYun@itcast.cn"
      5. }
      6. }

5.es客户端(restclient)

多个字段分词搜索:可以定义一个“all”字段,分词字段加上 

1.使用步骤

  1. //1.依赖
  2. <dependency>
  3. <groupId>org.elasticsearch.client</groupId>
  4. <artifactId>elasticsearch-rest-high-level-client</artifactId>
  5. </dependency>
  6. //2.指定版本,和服务器版本一致
  7. <properties>
  8. <maven.compiler.source>11</maven.compiler.source>
  9. <maven.compiler.target>11</maven.compiler.target>
  10. <elasticsearch.version>7.12.1</elasticsearch.version>
  11. </properties>
  12. //初始化
  13. RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(
  14. HttpHost.create("http://192.168.150.101:9200")
  15. ));

2.创建索引库

  1. void testCreateIndex() throws IOException {
  2. // 1.创建Request对象
  3. CreateIndexRequest request = new CreateIndexRequest("items");
  4. // 2.准备请求参数
  5. request.source(MAPPING_TEMPLATE, XContentType.JSON);
  6. // 3.发送请求
  7. client.indices().create(request, RequestOptions.DEFAULT);
  8. }
  9. static final String MAPPING_TEMPLATE = "{\n" +
  10. " \"mappings\": {\n" +
  11. " \"properties\": {\n" +
  12. " \"id\": {\n" +
  13. " \"type\": \"keyword\"\n" +
  14. " },\n" +
  15. " \"name\":{\n" +
  16. " \"type\": \"text\",\n" +
  17. " \"analyzer\": \"ik_max_word\"\n" +
  18. " },\n" +
  19. " \"price\":{\n" +
  20. " \"type\": \"integer\"\n" +
  21. " },\n" +
  22. " \"stock\":{\n" +
  23. " \"type\": \"integer\"\n" +
  24. " },\n" +
  25. " \"image\":{\n" +
  26. " \"type\": \"keyword\",\n" +
  27. " \"index\": false\n" +
  28. " },\n" +
  29. " \"category\":{\n" +
  30. " \"type\": \"keyword\"\n" +
  31. " },\n" +
  32. " \"brand\":{\n" +
  33. " \"type\": \"keyword\"\n" +
  34. " },\n" +
  35. " \"sold\":{\n" +
  36. " \"type\": \"integer\"\n" +
  37. " },\n" +
  38. " \"commentCount\":{\n" +
  39. " \"type\": \"integer\"\n" +
  40. " },\n" +
  41. " \"isAD\":{\n" +
  42. " \"type\": \"boolean\"\n" +
  43. " },\n" +
  44. " \"updateTime\":{\n" +
  45. " \"type\": \"date\"\n" +
  46. " }\n" +
  47. " }\n" +
  48. " }\n" +
  49. "}";

3.删除索引库

  1. // 1.创建Request对象
  2. DeleteIndexRequest request = new DeleteIndexRequest("items");
  3. // 2.发送请求
  4. client.indices().delete(request, RequestOptions.DEFAULT);

4.文档操作-新增文档

  1. POST /{索引库名}/_doc/1
  2. {
  3. "name": "Jack",
  4. "age": 21
  5. }

2.分布式搜索引擎

1.查询类型

1.查询所有;match_all;
  1. GET /{索引库名}/_search
  2. {
  3. "query": {
  4. "查询类型": {
  5. // .. 查询条件
  6. }
  7. }
  8. }
  9. GET /items/_search
  10. {
  11. "query": {
  12. "match_all": {
  13. }
  14. }
  15. }
2.全文检索搜索
 
  1. //会对用户的输入内容分词,按照倒排索引搜索,推荐第一种
  2. GET /{索引库名}/_search
  3. {
  4. "query": {
  5. "match": {
  6. "字段名": "TEXT"//一般情况是倒排索引的text的字段
  7. }
  8. }
  9. }
  10. GET /{索引库名}/_search
  11. {
  12. "query": {
  13. "multi_match": {
  14. "query": "搜索条件",
  15. "fields": ["字段1", "字段2"]
  16. }
  17. }
  18. }
  19. //查询字段越多性能越差,建议使用copyto
3.精确查询
 
  1. 顾名思义,词条级别的查询。也就是说不会对用户输入的搜索条件再分词,而是作为一个词条,与搜索的字段内容精确值匹配。因此推荐查找keyword、数值、日期、boolean类型的字段。
  2. term是词条精确值查询,比如说酒店名称
  3. GET /{索引库名}/_search
  4. {
  5. "query": {
  6. "term": {
  7. "字段名": {
  8. "value": "搜索条件"
  9. }
  10. }
  11. }
  12. }
  13. range是范围查询,比如说金额范围
  14. GET /{索引库名}/_search
  15. {
  16. "query": {
  17. "range": {
  18. "字段名": {
  19. "gte": {最小值},
  20. "lte": {最大值}
  21. }
  22. }
  23. }
  24. }
4.地理查询

比如查询附近的酒店;

2.搜索结果处理

排序
分页
高亮

3.数据聚合

  1. 概念
    1. 实现对文档数据的统计分析和运算;
  2. 分类:
    1. 桶分组:()bucket
      1. tremaggregation和mysql中的分组类似;
      2. date histogram:按照日期分组。一周一组或者一月一组等;
    2. 度量聚合(metric)
      1. 用于计算,比如说最大最小值,平均值等;
      2. AVg;
      3. max;
      4. min;
      5. stats同时求前三个;

4.自动补全功能

5.数据同步

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/886112
推荐阅读
相关标签
  

闽ICP备14008679号