Elasticsearch中间件详细教程—高级篇

Elasticseach中间件详细教程—基础篇

Elasticseach中间件详细教程—进阶篇

Elasticseach中间件详细教程—实战篇

数据聚合

  • 桶聚合:类似MySQL的group_by
  • 度量聚合
    • max
    • min
    • avg
    • stats:同时求max、min、avg、sum等
  • 管道聚合:以上述2个聚合为基础在做聚合

桶聚合

  • query:对聚合的范围结果进一步缩小,可以不写

  • size:不显示文档数据,这里专注聚合的结果,可以不写。

  • order:默认是对_count降序,可自定义

GET /hotel/_search
{
  "query": {
    "range": {
      "price": {
        "lte": 200
      }
    }
  }, 
  "size": 0,
  "aggs": {
    "brandAgg": {
      "terms": {
        "field": "brand",
        "size": 10,
        "order": {
          "_count": "asc"
        }
      }
    }
  }
}

度量聚合

  • stats可换其他聚合类型,搜索出来的结果只是单一,跟MySQL的maxmin等用法一样
GET /hotel/_search
{
  "size": 0,
 "aggs": {
   "scoreAgg": {
     "stats": {
       "field": "score"
     }
   }
 }
}

管道聚合

  • 在桶聚合的同级下再去做聚合

  • 如果要对度量聚合结果进行排序,可在order替换对应的映射。e.g:"scoreAgg.avg": "asc"

GET /hotel/_search
{
  "query": {
    "range": {
      "price": {
        "lte": 200
      }
    }
  }, 
  "size": 0,
  "aggs": {
    "brandAgg": {
      "terms": {
        "field": "brand",
        "size": 10,
        "order": {
          "_count": "asc"
        }
      },
      "aggs": {
        "scoreAgg": {
          "stats": {
            "field": "score"
          }
        }
      }
    }
  }
}

自动补全

引入概念:分词器

对搜索的关键字进行补全提示,要在创建索引时候去引入

扩展

ik分词器

  • ik_smart
POST /_analyze
{
  "text": ["不会编程的小白"],
  "analyzer": "ik_smart"
}POST /_analyze
{
  "text": ["不会编程的小白"],
  "analyzer": "ik_smart"
}
  • ik_max_word
POST /_analyze
{
  "text": ["不会编程的小白"],
  "analyzer": "ik_max_word"
}

拼音分词器

POST /_analyze
{
  "text": ["不会编程的小白"],
  "analyzer": "pinyin"
}

自定义

  • 模板
  • tokenizer:将文本分割为最大粒度的词语
  • filter:指定了一个名为py的过滤器,用于进一步处理分词结果
  • py:
    • type:设置过滤器的类型为pinyin
    • keep_full_pinpin:设置为false,表示不保留全拼音。
    • keep_joined_full_pinyin:设置为true,表示保留连接起来的全拼音(如“你好”会变成“nihao”)。
    • keep_original:设置为true,表示保留原始的中文词语。
    • limit_first_letter_term:限制首字母拼音的术语长度为16个字符。
    • remove_duplicated_term:设置为true,表示移除重复的术语。
    • none_chinese_pinyin_tokenize:设置为false,表示不对非中文字符进行拼音分
PUT /test
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "tokenizer": "ik_max_word",
          "filter": "py"
        }
      },
      "filter": {
        "py": {
          "type": "pinyin",
          "keep_full_pinpin": false,
          "keep_joined_full_pinyin": true,
          "keep_original": true,
          "limit_first_letter_term": 16,
          "remove_duplicated_term": true,
          "none_chinese_pinyin_tokenize": false
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "introduction": {
        "type": "text",
        "analyzer": "my_analyzer",
        "search_analyzer": "ik_smart"
      }
    }
  }
}
  • 使用自定义的分词器
POST /test/_analyze
{
  "text": ["不会编程的小白"],
  "analyzer": "my_analyzer"
}

使用

  • mapping构建使用类型为completion
"mappings": {
    "properties": {
      "introduction": {
        "type": "completion",
        "analyzer": "my_analyzer",
        "search_analyzer": "ik_smart"
      }
    }
  }
  • 查询
    • 模板
{
  "suggest": {
    "YOUR_SUGGESTION": {
      "text": "YOUR TEXT",
      "term": {
        "FIELD": "MESSAGE"
      }
    }
  }
}
{
  "suggest": {
    "title_suggest": {
      "text": "s", # 查询的关键字
      "completion": {
        "field": "title", # 字段
        "skip_duplicates": true, # 跳过重复
        "size": 10
      }
    }
  }
}
  • 重新构建mapping
  • 插入模拟数据
  • 查询
GET /hotel/_search
{
  "suggest": {
    "suggestions": {
      "text": "h",
      "completion": {
        "field": "suggestion",
        "skip_duplicates": true,
        "size": 10
      }
    }
  }
}

数据同步

具体使用根据自身业务需求

  • 同步调用:耦合度高,性能差
  • 异步调用:MQ实现。耦合度低,成本高
  • 监听
    • Logstach:成本高、配合其他组件使用
    • MySQL订阅cancel:解耦,MySQL添加负担

Elasticseach中间件详细教程—基础篇

Elasticseach中间件详细教程—进阶篇

Elasticseach中间件详细教程—实战篇

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
很抱歉,Elasticsearch当前最新版本为7.15.1,没有8.8.1版本。以下是Elasticsearch 7.15.1的详细安装教程: 1. 下载Elasticsearch 在官网 https://www.elastic.co/cn/downloads/elasticsearch 下载Elasticsearch的压缩包,选择适合自己操作系统的版本。下载完成后解压到任意目录。 2. 修改配置文件 进入Elasticsearch的config目录,修改elasticsearch.yml文件。比如: ``` # 设置集群名称 cluster.name: my-cluster # 设置节点名称 node.name: my-node # 设置数据存储路径 path.data: /path/to/data # 设置日志文件路径 path.logs: /path/to/logs ``` 3. 启动Elasticsearch 在终端中进入Elasticsearch的bin目录,执行以下命令启动Elasticsearch: ``` ./elasticsearch ``` 如果一切顺利,你应该能看到类似以下的输出: ``` [2021-10-20T14:12:18,394][INFO ][o.e.n.Node ] [my-node] version[7.15.1], pid[12345], build[default/tar/123abc/2021-10-11T22:34:29.218660Z], OS[Linux/4.14.143-89.123.amzn1.x86_64/amd64], JVM[AdoptOpenJDK/OpenJDK 64-Bit Server VM/16.0.2/16.0.2+7] [2021-10-20T14:12:18,396][INFO ][o.e.n.Node ] [my-node] JVM arguments [-Xms1g, -Xmx1g, -XX:+UseG1GC, -XX:G1ReservePercent=25, -XX:InitiatingHeapOccupancyPercent=30, -Djava.awt.headless=true, -Dfile.encoding=UTF-8, -Djna.nosys=true, -Djdk.io.permissionsUseCanonicalPath=true, -Dio.netty.noUnsafe=true, -Dio.netty.noKeySetOptimization=true, -Dio.netty.recycler.maxCapacityPerThread=0, -Dlog4j.shutdownHookEnabled=false, -Dlog4j2.disable.jmx=true, -Djava.locale.providers=SPI,COMPAT, -Xms512m, -Xmx512m, -Des.path.home=/path/to/elasticsearch-7.15.1, -Des.path.conf=/path/to/elasticsearch-7.15.1/config, -Des.distribution.flavor=default, -Des.distribution.type=tar, -Des.bundled_jdk=true] [2021-10-20T14:12:19,999][INFO ][o.e.p.PluginsService ] [my-node] loaded module [aggs-matrix-stats] [2021-10-20T14:12:19,999][INFO ][o.e.p.PluginsService ] [my-node] loaded module [analysis-common] [2021-10-20T14:12:19,999][INFO ][o.e.p.PluginsService ] [my-node] loaded module [geo] [2021-10-20T14:12:19,999][INFO ][o.e.p.PluginsService ] [my-node] loaded module [ingest-common] ... [2021-10-20T14:12:20,000][INFO ][o.e.p.PluginsService ] [my-node] loaded module [transport-netty4] [2021-10-20T14:12:20,000][INFO ][o.e.p.PluginsService ] [my-node] no plugins loaded [2021-10-20T14:12:23,123][INFO ][o.e.x.s.a.s.FileRolesStore] [my-node] parsed [0] roles from file [/path/to/elasticsearch-7.15.1/config/roles.yml] [2021-10-20T14:12:24,456][INFO ][o.e.i.g.GatewayService ] [my-node] recovered [0] indices into cluster_state [2021-10-20T14:12:27,521][INFO ][o.e.c.r.a.AllocationService] [my-node] Cluster health status changed from [RED] to [YELLOW] (reason: [shards started [[my-index][0]]]). ``` 这表示Elasticsearch已经成功启动。你可以通过访问`http://localhost:9200`来验证Elasticsearch是否运行正常。 4. 安装插件 Elasticsearch提供了很多插件,可以根据自己的需求进行安装。比如,安装kopf插件: ``` ./bin/elasticsearch-plugin install lmenezes/elasticsearch-kopf/2.1.2 ``` 5. 配置Elasticsearch作为服务 如果你想将Elasticsearch作为服务在后台运行,可以参考官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/starting-elasticsearch.html。 希望这个安装教程能够帮助到你。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mredust

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值