当前位置: 首页 > news >正文

自贡网站建设/关键词优化排名软件推荐

自贡网站建设,关键词优化排名软件推荐,做网站都需要学什么语言,重庆沙坪坝区房价在Elasticsearch6.0中,引入了一个新的特征,叫Index Sorting(索引排序)。用户可以将索引数据按照指定的顺序存储在硬盘上,这样在搜索排序取前N条时,不需要访问所有的匹配中的记录再进行排序,只需要访问前N条记录即可。L…

在Elasticsearch6.0中,引入了一个新的特征,叫Index Sorting(索引排序)。用户可以将索引数据按照指定的顺序存储在硬盘上,这样在搜索排序取前N条时,不需要访问所有的匹配中的记录再进行排序,只需要访问前N条记录即可。

Lucene中的Index Sorting

很多年以前,Lucene引入了一个工具叫做IndexSorter。这个工具的作用是从一个已有的索引中取数,然后按照指定的字段排序输出到另一个索引中。当然,这个排好序的索引是不允许用户进行数据修改的,所以用户每次修改了源索引,必须要重新构建生成目标索引。IndexSorter是Lucene第一次尝试在索引阶段,直接将数据排序存储到硬盘上。

有了索引排序的概念以后,另一个“early termination(早期中断)”概念也被引入。假设你要搜索按照日期排序的前N条记录时,如果索引在硬盘上已经按照日期排好序了,那么我们只需访问匹配搜索条件的前N条记录,就可以中断请求。这就是早期中断的概念。很明显,早期中断带来了巨大的性能提升,不需要访问所有的匹配中的记录,不需要再搜索时排序。但是,IndexSorter也有问题,不能适应频繁更新的索引。这又引入了一个新的想法,在在索引Merge阶段进行排序。

Lucene的提升

Lucene会定期的刷新产生一个新的段(Segment),这个新的段包含了自从上次刷新以后新到达的所有数据。一旦刷新产生了段,数据就可以被搜索展示了。因为刷新频繁的发生,Elasticsearch 1s刷新一次,所以会产生大量的段文件,为了限制段文件的数量,Lucene会在后台定期的合并(merge)这些段文件。合并其实就是将多个小文件合并成一个大文件,为了能在merge阶段对文档重新排序,Lucene引入了一种新的merge策略。这种新的设计使得用户可以不使用IndexSorter这种静态工具就能在索引阶段对数据进行排序。由于一些段已经排序,而新刷新的段则没有排序,所以,merge的时候首先对没排序的段排序,然后与已排好序的段进行合并。

当然,在merge阶段排序,会带来索引吞吐量的降低。下面的测评显示了merge阶段的排序将总共的吞吐量降低了一倍。

性能降低的原因也很简单:merge阶段需要先对未排序的段进行排序,然后再合并。

为了减少对多个段的再排序花费,Lucene决定在索引阶段(flush)就对数据进行排序。现在,因为所有的段文件都是排好序的,merge过程更加快速了。这个在刷新阶段就排序的特性在Lucene6.5被引入,带来了65%的性能提升。

借助于Lucene的努力,Elasticsearch6.0引入了Index Sorting的概念,大大提升了搜索的速度。

搜索时的早期中断

很常见的一种搜索,按照某个字段进行排序,返回前N条记录。虽然只是获取前N条记录,Elasticsearch需要遍历所有匹配的文档,排序,然后返回前N条。尽管Doc values使得排序更加的有效,但是当匹配的数据集较大时,这个过程仍然会耗费较大的资源。

有了index sorting,我们可以提前指定文档的存储顺序,这样在搜索时,只需要访问前N条记录,就可以中断。

例如下面的图示,5.x需要访问所有的文档,排序计算前3条记录。而6.x因为提前按照顺序存储了文档,在搜索时只需访问前3条即可。

如何指定索引顺序

PUT scores

{

"settings": {

"index": {

"sort.field": "points",

"sort.order": "desc"

}

},

"mappings": {

"score": {

"properties": {

"points": {

"type": "long"

},

"playerid": {

"type": "keyword"

},

"game": {

"type": "keyword"

}

}

}

}

}

将相似的文档聚合在了一起

按照顺序存储文档,可以将相似的文档存储到一起,能够带来更好的压缩(例如差值压缩),以及更快的查询速度(不是绝对,查询速度取决于你的查询类型和查询语句)。

更加有效的And交集查询

例如下面的查询

GET players/player/_search

{

"size": 3,

"track_total_hits": false,

"query": {

"bool": {

"filter": [

{

"term": {

"region": "eu"

}

},

{

"term": {

"game": "dragons-lair"

}

},

{

"term": {

"skill-rating": 9

}

},

{

"term": {

"map": "castle"

}

}

]

}

}

}

Elasticsearch会按照下面的方式获取结果返回给用户:

如果我们在存储时指定了顺序:

PUT players

{

"settings": {

"index": {

"sort.field": [

"region",

"game",

"skill-rating",

"map"

],

"sort.order": [

"asc",

"asc",

"asc",

"asc"

]

}

},

"mappings": {

"player": {

"properties": {

"playerid": {

"type": "keyword"

},

"region": {

"type": "keyword"

},

"skill-rating": {

"type": "integer"

},

"game": {

"type": "keyword"

},

"map": {

"type": "keyword"

}

}

}

}

}

现在文档被存放在了一起:

查询获取到的数据集中在了一起,减少了随机寻址。

什么时候不建议使用索引排序

前面已经说过,在索引阶段排序会降低写入的吞吐量,如果你的应用对于写入的性能要求高,那么索引排序并不是一个好的选择。用户需要平衡查询速率和写入速率,实际测试以后做出自己的选择。

http://www.lbrq.cn/news/36937.html

相关文章:

  • centos6.6做网站/云seo关键词排名优化软件
  • 文化建设设计网站/seo运营学校
  • 深圳网站设计 建设元/重庆seo顾问
  • 网站建设十佳/seo搜索排名优化是什么意思
  • wordpress连阿里云域名/seo关键词查询
  • 答题网站开发/加入网络营销公司
  • logo网站/品牌推广的方式
  • 成都盘古网站是谁做/篮网最新消息
  • 站酷设计网站首页/互联网平台有哪些
  • dreamweaver购物网站模板/桂林seo排名
  • 洛阳网站设计哪家专业/廊坊网站建设优化
  • 中国域名注册中心/宁波seo网络推广报价
  • 大连网站建设公司领超科技怎么样/河北关键词seo排名
  • 哈尔滨政府网站建设/河北百度竞价优化
  • php动态网站开发课后习题/网站建设网站设计
  • 网站如何不需要备案/凡科建站登录入口
  • 东光网站制作/培训心得体会2000字
  • 虎门网站制作/seo效果分析
  • 菏泽市建设银行网站/文章推广平台
  • 温州网站制作企业/微信营销方式有哪些
  • 网站域名防劫持怎么做/品牌建设的五个要素
  • 做企业网站项目/域名解析在线查询
  • 绵阳做手机网站/南京百度网站推广
  • 钟楼做网站/百度seo排名优化软件
  • 用手机怎么制作app软件/seo 360
  • 网站设计案例分析/国外网站设计
  • 做云购网站/徐州seo培训
  • 微信网站建设平台/青岛seo杭州厂商
  • 南京政府网站建设/营销策略
  • 哪个网站做美食视频网站好/网推
  • Git使用与管理
  • C++ :vector的介绍和使用
  • parallels desktop windows win10无法复制文件无法共享剪切板
  • 实训十一——网络通信原理
  • MySQL 8.0 OCP 1Z0-908 题目解析(27)
  • 李宏毅《生成式人工智能导论》 | 第9讲 AI Agent