盖娅计划

加强彼此联系,努力实现盖娅星系!


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

elasticsearch 搜索排序

发表于 2022-02-12 | 分类于 elasticsearch

概述

搜索结果排序是搜索引擎必备的功能,也是能直接影响用户搜索体验的重要功能。elasticsearch作为一个优秀的分布式搜索引擎,不仅可以针对属性做字典序或数值排序,还可以根据 实用评分函数(practical scoring function)计算相似度并排序。本文主要分享elasticsearch提供的搜索排序能力,具体将从以下四点进行介绍:

  1. 首先解释关键概念——搜索和过滤,区分它们的差异。
  2. 介绍Es排序API,如何通过查询请求中sort字段控制es排序。
  3. 介绍es在计算相似度评分以及如何控制相关性。
  4. 总结全文并介绍一些本人在搜索排序中的心得体会。
阅读全文 »

工程师精神

发表于 2022-02-06 | 分类于 文心雕龙

概述

以往我经常以工程师自居,最近突然在思考:什么样的人算是工程师?他们是如何做事的?核心精神又应该是什么样的?带着这些疑问我查了查资料,看些别人的视频,现在总结出一些观点和大家分享。

阅读全文 »

elasticsearch-Search template 模板搜索

发表于 2021-05-31 | 更新于 2021-06-01 | 分类于 elasticsearch

概述

Elasticsearch 允许使用模板语言 mustache 来预设搜索逻辑,在实际搜索时,通过参数中的键值,对来替换模板中的占位符,最终完成搜索。该方式将搜索逻辑封闭在 Elasticsearch 中,可以使下游服务,在不知道具体搜索逻辑的情况下完成数据检索。我们以 Kibana 自带的航班数据kibana_sample_data_flights为基础,以按航班号搜索为例,简单介绍搜索模板的使用。

第一步,创建 ID 为 testSearchTemplate 的搜索模板,语句如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
POST _scripts/testSearchTemplate
{
"script": {
"lang": "mustache", #使用 mustache 模板语言
"source": { # 脚本内容
"query": { # 搜索逻辑
"term": {
"FlightNum": {
"value": "{{FlightNum}}" # 占位符 FlightNum
}
}
}
}
}
}

第二步,传参搜索数据,语句如下

1
2
3
4
5
6
7
GET kibana_sample_data_flights/_search/template
{
"id": "testSearchTemplate", # 使用的模板ID
"params": {
"FlightNum": "9HY9SWR" # 占位符替换的值
}
}

以上两步就是使用模板搜索数据,该逻辑等同于下面这个搜索

1
2
3
4
5
6
7
8
9
10
GET kibana_sample_data_flights/_search
{
"query": {
"term": {
"FlightNum": {
"value": "9HY9SWR"
}
}
}
}
阅读全文 »

elasticsearch-Index template 索引模板

发表于 2021-05-31 | 更新于 2021-06-01 | 分类于 elasticsearch

简介

Elasticsearch 本着让用户方便快捷的使用搜索功能的原则,对数据定义(索引定义)做了高度抽象,尽可能得避免了重复性定义工作,使之更加灵活。

Elasticsearch 在这方面做的工作主要体现是索引模板(Index template)和动态映射(Dynamic Mapping)两个功能。索引模板的主要功能,是允许用户在创建索引(index)时,引用已保存的模板来减少配置项。操作的一般过程是先创建索引模板,然后再手动创建索引或保存文档(Document)。而自动创建索引时,索引模板会作为配置的基础作用。对于 X-Pack 的数据流(Data Stream)功能,索引模板用于自动创建后备索引(Backing Indices)。该功能的意义是提供了一种配置复用机制,减少了大量重复作劳动。

目前 Elasticsearch 的索引模板功能以 7.8 版本为界,分为新老两套实现,新老两个版本的主要区别是模板之间复用如何实现。

老版本:

使用优先级(order)关键字实现,当创建索引匹配到多个索引模板时,高优先级会继承并铺盖低优先级的模板配置,最终多个模板共同起作用。

新版本:

删除了 order 关键字,引入了组件模板 Component template 的概念,是第一段可以复用的配置块。在创建普通模板时可以声明引用多个组件模板,当创建索引匹配到多个新版索引模板时,取用最高权重的那个。

下面将以生命周期(创建、查看、使用、删除)为切入点,分别介绍如何使用 Elasticsearch 新老两个版本的索引模板。

阅读全文 »

elasticsearch-dynamic mapping 动态映射

发表于 2021-05-31 | 更新于 2021-06-01 | 分类于 elasticsearch

概述

通常来说,搜索数据一般需要经过 3 个步骤:

  • 定义数据(建表建索引)

  • 录入数据

  • 搜索数据

在现实使用中,定义数据往往是比较繁琐,并且有大量的重复操作。

Elasticsearch 本着让用户使用更方便快捷的原则,针对这个问题做了很多工作,使定义数据的方式更加抽象灵活,多个雷同的字段可使用 1 个配置完成。

比较有代表性的2个功能分别是:

  • 索引模板(index template):可以根据规则自动创建索引。

  • 动态映射(dynamic mapping):自动将新字段添加到映射中。

本小节我们着重介绍动态映射(dynamic mapping)

根据官方的定义动态映射可以自动检测和添加新字段(field)到映射(mapping)中。动态映射可以通过基础属性自动发现(Dynamic field mappings)以及复杂属性动态生成(Dynamic templates)2个方式实现此功能。

阅读全文 »

soul学习16——Sentinel插件学习

发表于 2021-03-15 | 更新于 2021-03-18 | 分类于 soul

概述

在业务网关中熔断和流量控制都是非常必要的功能。soul在实现这部分功能时使用了不同的成熟组件,用户可以根据自己的喜好选择。本文将介绍如何在soul中使用阿里的Sentinel组件实现熔断及流控功能。本文首先会介绍熔断和流控的场景及意义。然后介绍如何在soul上配置使用sentinel插件做流控和熔断。最后从源码的层面简略分析soul是如何使用Sentinel组件的。

阅读全文 »

soul番外1——XSS攻击

发表于 2021-02-01 | 更新于 2021-03-15 | 分类于 soul

概述

网关作为所有服务的大门,应该有一些安全防护的功能,抵御常规的攻击。XSS攻击是非常常见的一种攻击方式。本文将简单介绍XSS攻击并讨论网关应该如何抵御XSS攻击。

阅读全文 »

soul学习15——sign插件学习

发表于 2021-01-30 | 分类于 soul

概述

本文我们只要看下sign插件——业务端验签插件的原理和实现。并讨论下数字签名以及业务层验签。

阅读全文 »

soul学习14——Divide插件学习

发表于 2021-01-29 | 更新于 2021-01-30 | 分类于 soul

概述

前面的一些列文章介绍了soul网关的核心流程以及数据同步这两大最重要的功能逻辑。鉴于后续希望为soul贡献1个插件,所以接下来再学习学习soul中其它核心插件的写法,今天先看看divide插件

阅读全文 »

soul学习13——zookeeper同步数据

发表于 2021-01-28 | 更新于 2021-01-30 | 分类于 soul

概述

前几篇文章介绍了suol用websocket、http长轮询的方式同步数据,今天我们来看看zookeeper同步数据是如何实现的。使用websocket同步数据时,在soul-admin服务端有负责监听数据变化事件的HttpLongPollingDataChangedListener以及负责接收soul网关连接的WebsocketCollector,在soul服务端有实现SyncDataService的WebsocketSyncDataService,负责实现当接收到配置变化。下面我们来对应看看zookeeper这几部分是如何实现的。

阅读全文 »
12…6
Phoenix Luo

Phoenix Luo

骆潇龙开脑洞的地方

51 日志
11 分类
37 标签
© 2022 Phoenix Luo 京ICP备19007490号
由 Hexo 强力驱动 v3.8.0
|
主题 – NexT.Pisces v6.7.0
本站总访问量 次 | 有人看过我的博客啦