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
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Mredust

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

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

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

打赏作者

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

抵扣说明:

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

余额充值