首页 SEO技术 正文

! [幽默的ES配置调研]Keyword类型字段排序居然是这种成果 (幽默的emo文案)

SEO技术 2025-01-08 22

本文目录导航:

[幽默的ES配置调研]Keyword类型字段排序居然是这种成果?!

在 Elasticsearch 的经常使用环节中,咱们了解到 string 类型在 5.0 版本后出现了严重变卦,被拆分红 text 和 keyword 两种新的数据类型。

自动状况下,文本字段同时映射为 text 和 keyword 类型,这也解释了为什么某些字段会智能创立与之对应的 字段。

在实践运行中,咱们经常常使用 keyword 类型启动关键词搜查,并且须要设置排序规定。

但是,在一次性试验中,咱们发现了一个无心思的现象:当设置 mode 为 min 和 order 为 desc 时,排序结果并没有如预期的那样启动降序陈列,这惹起了咱们的思索和考查。

接上去,咱们经常使用 Lucene 启动了深化摸索。

经过对比不同选项的组合,咱们发现排序行为在 keyword 类型的多值查问中具备特定的规律。

这些规律重要体如今 sortMode 和 sortOrder 的选用上,它们对排序顺序发生了影响。

在 Lucene 的成功中,keyword 类型的写入分为两局部:存储时,数据以 doc values 方式启动排序,行将文本内容编号并排序,而非存储实践的文本值。

同时,排序操作在写入环节中就曾经成功,这为咱们的初步论断提供了基础。

接上去,咱们深化钻研了 sortMode 和 sortOrder 在 Lucene 中对 keyword 查问的影响。

经过对源代码的剖析,咱们发现 sortMode 的值选择了排序方式,而 sortOrder 则影响了排序的顺序。

例如,当 sortMode 设置为 MAX 时,排序取值逻辑会依据 sortOrder 的顺序调整,这进一步影响了文档召回顺序的陈列。

在查问流程中,排序和打分的环节出当初多个步骤中。

在 Lucene 的查问成功中,排序和结果搜集的环节触及优先队列(PriorityQueue)的运行。

优先队列的调整环节在排序时施展了关键作用,确保了却果依照指定的顺序输入。

综上所述,keyword 类型在 Elasticsearch 中的排序行为遵照特定的规律。

索引时,排序消息被嵌入数据中,查问时依据 sortMode 和 sortOrder 的设置启动排序,从而影响了排序结果的出现。

最终,咱们总结出关键词排序的关键点,包括自动排序规定、查问时的排序规定选用以及排序规定对结果召回顺序的影响。

! [幽默的ES配置调研]Keyword类型字段排序居然是这种成果 (幽默的emo文案)

优先队列(PriorityQueue)

在数据结构中,普通的队列是先进先出,但有时咱们或者并不想有这么固定的规矩,咱们宿愿能有一个带优先级的队列。

思索在事实生存中,一些服务排队窗口会写着“军人依法优先”;送进医院的患者,即使是按顺序抵达的,生病愈加严重的往往优先级也会更高;还有操作系统中的作业调度也和优先级无关...... 于是咱们能不能改良队列?使得队列是有必定优先级的,这样能让一些事物和义务的处置变的愈加灵敏。

当然是可以的,最基本的咱们可以基于线性结构来成功,思索基于线性结构的期间复杂度: 1、队列是一种FIFO(First-In-First-Out)先进先出的数据结构,对应于生存中的排队的场景,排在前面的人总是先经过,依次启动。

2、优先队列是不凡的队列,从“优先”一词,可看出有“插队现象”。

比如在火车站排队进站时,就会有些比拟急的人来插队,他们就在前面先经过验票。

优先队列至少含有两种操作的数据结构:insert(拔出),行将元素拔出到优先队列中(入队);以及deleteMin(删除最小者),它的作用是找出、删除优先队列中的最小的元素(出队)。

结构\操作 入队出队 普通线性结构O(1)O(n) 顺序线性结构O(n)O(1) 普通线性结构成功的优先队列出队期间复杂度是O(n),由于出队要拿出最优先的元素,也就是相对最大的元素(留意:大小是相对的,咱们可以指定比拟规定),从而要扫描一遍整个数组选出最大的取出才行。

而关于顺序线性结构的入队操作,入队后或者破坏了原来的有序性,从而要调整以后顺序。

可以看到经常使用线性结构总有期间复杂度是O(n)的操作,还有没有更好的成功方式呢,当然是有的,这就要来聊一聊堆Heap。

堆严厉意义过去说又叫二叉堆(Binary Heap),由于它的结构是一颗齐全二叉树,堆普通分为最大堆和最小堆。

堆性质: 结构性:堆是一颗除底层外被齐全填满的二叉树,底层的节点从左到右填入,这样的树叫做齐全二叉树。

即缺失结点的局部必定再树的右下侧。

堆序性:由于咱们想很快找出最小元,则最小元应该在根上,恣意节点都小于它的后裔,这就是小顶堆(Min-Heap);假设是查找最大元,则最大元应该在根上,恣意节点都要大于它的后裔,这就是大顶堆(Max-heap)。

最大堆:父亲节点的值大于孩子节点的值 最小堆:父亲节点的值小于孩子节点的值 由于是齐全二叉树,节点的索引之间有着必定的相关,故咱们可以经常使用数组来存储二叉堆,详细如下: 假设从索引为0开局存储,则父亲和孩子节点的索引相关如下: 当咱们须要向一个最大堆减少一条新的数据时,此时咱们的堆变成了这样。

此时,由于新数据的参与曾经不合乎最大堆的定义了。

所以咱们须要对新参与的数据启动shift up操作,将它放到它应该在的位置。

shift up操作时咱们将新参与的数据与它的父节点启动比拟。

假设比它的父节点大,则交流二者。

此时咱们就成功了 对新参与元素的shift up操作。

当咱们从堆中(也就是优先队列中)取出一个元素时。

咱们是将堆顶的元素弹出。

(只能从堆顶取出) 此时这个堆没有顶了,那么该怎样办呢?咱们只有要把这个堆最后一个元素放到堆顶就可以了。

此时咱们就成功了弹出一个元素之后的shift down操作。

replace:去除最大元素后,放入一个新元素 成功:可以先extractMax,再add,两次longn操作。

成功:将堆顶的元素交流以后sift down,一次性O(logn)操作 将n个元素一一拔出到一个空堆中,算法复杂度是O(nlogn),heapify的环节,算法的复杂度为O(n). heapify:将恣意数组整顿成堆的状态。

首先将一个数组形象成一个堆。

这个环节,咱们称之为heapify。

之后咱们找到这个堆中第一个非叶子节点,这个节点的位置一直是数组的数量除以2,也就是索引5位置的27,从这个节点开局,对每一个非叶子的节点,,启动shift down操作。

27比它的子节点51要小,所以交流二者。

接上去咱们看索引2位置的20。

首先呢,咱们须要将20与它两个子节点中较大的51交流。

每个节点堆化的期间复杂度是O(logn),那个节点的堆化的总期间复杂度是O(nlogn)。

推导环节 堆化节点从倒数第二层开局。

堆化环节中,须要比拟和交流的节点个数与这个节点的高度k成正比。

所以 heapify() 期间复杂度是 O(n). 建堆后,数组中的数据是大顶堆。

把堆顶元素,即最大元素,跟最后一个元素交流,那最大元素就放到了下标为n的位置。

这个环节有点相似下面的“删除堆顶元素”的操作,当堆顶元素移除之后,把下标n的元素放堆顶,而后再经过堆化的方法,将剩下的n-1个元素从新构建成堆。

不时重复这个环节,直到最后堆中只剩下下标为1的元素,排序就成功了。

topk和selectk疑问既可以经常使用快排思维处置,也可以经常使用优先队列处置。

快排:O(n) 空间O(1) 优先队列:O(nlogk) 空间O(k) 优先队列的有i是,不须要一次性性知道一切数据,数据流的方式处置。

回溯法、分支限界法两种思维帮你轻松搞定游览售货员疑问(TSP)

某售货员须要在多个市区采购商品,已知各市区间的距离。

疑问要求找到从登程地登程,经过一切市区,最后前往登程地的路途,使总距离最小。

本文以4个市区为例,展现疑问的解空间树。

关于解空间树,可以应用回溯法和分支限界法求解。

回溯法是一种深度优先搜查战略,从根节点开局,尝试一切或者门路,当遇到或者的解时继续搜查,否则回溯至上一节点。

若指标是找到一个可行解,一旦找到即可中止;若指标是最优解,需遍历一切解。

以4市区为例,回溯法搜查环节如下:首先从市区1登程,尝试一切或者的门路,如。

计算总距离,若超越以后最优解则剪枝,继续搜查其余门路。

当门路的总距离大于最优解时,回溯至市区C,尝试其余门路。

门路的总距离更优,继续搜查。

门路的总距离小于最优解,降级最优解为25,继续回溯。

门路的总距离大于最优解,剪枝。

遍历一切可行门路后,获取的最优解即为全局最优解。

回溯法代码成功如下(简化局部定义变量):定义邻接矩阵存储地图消息,将地图转化为二维数组,一致索引。

程序蕴含向下搜查和向上回溯的条件判别,依据深度t能否大于节点数-1确定能否回溯。

回溯时恢复节点数据,输入最优解及其门路。

分支限界法应用广度优先搜查战略,经过优先队列挑选活节点,优先级以最小消耗优先。

以市区1登程,生成子节点,依据以后门路总距离和预估下界计算优先级,存入活节点表。

优先级高的节点成为裁减节点,重复环节直至找到最优解。

以市区1为例,生成一切子节点,依据已知门路计算下界。

优先级最高的节点成为裁减节点,继续搜查。

最终获取最优门路及总距离。

总结,回溯法和分支限界法都是在解空间树上搜查疑问解的算法。

回溯法适宜找到一切可行解,分支限界规律更快找到最优解。

关于游览售货员疑问,分支限界法更为实用。

orderby自动是升序还是降序 (orderby降序与升序)
« 上一篇 2025-01-08
哪些属于数据类 (哪些属于数据库管理系统)
下一篇 » 2025-01-08

文章评论

文章内容详实,对ES配置调研、优先队列和TSP问题中的回溯法及分支限界法的解析非常清晰,文章结构明晰且逻辑连贯性强有助于读者理解相关知识点的实际应用场景和操作细节!

文章内容详细解析了ES配置中的幽默现象,优先队列和回溯法、分支限界法的应用,文章结构清晰明了且逻辑性强有助于读者理解相关知识点的实际应用场景和应用方法值得一读!