zoukankan      html  css  js  c++  java
  • Elasticsearch

    术语:

    Term :索引里最小的存储和查询单元,词;

    字典:Term的集合;

    倒排表:记录某些词出现在哪些文章中;

    正向信息:最原始的文档信息;

    段:索引中最小的独立存储单元,不可变;

    检索方式:

    单个词

    AND(分别查到词A和词B的文档链表,然后做交集运算)

    OR(做并集运算)

    NOT(做差集运算)

    分段储存:

    如果不分段储存的话,会生成一个非常大的倒排索引写入磁盘,并且如果索引有更新,就需要重新全量创建一个索引来替换原来的索引。这种方式在数据量很大时,效率过低。

    因此在搜索中引入了段的概念,讲一个索引文件拆分为多个子文件,则每个子文件叫做段,每个段都是一个独立的可搜索数据集。并且段具有不可变性。

    新增:新建一个段

    删除:新增一个.del文件,储存被删除的数据id。查询还能查得到,只是进行链表合并时会把删除的过滤掉,在段合并时才会真正的移除

    更新:删除+新增

    优点:

    不需要锁

    缓存友好

    增量创建

    缺点:

    空间浪费

    为了提升写的性能,使用了优化的方式。

    (1)新数据写入时,并没有直接写入硬盘中,而是暂时写入到内存,当内存中数据量达到一定阶段时,再批量提交到磁盘;

    (2)达到除法条件后,会将内存中缓存的数据一次性写入磁盘,并生成提交点;

    (3)清空内存;

    (4)一个段一旦拥有提交点,那么这个段只有读权限,失去写权限,相反,它在内存中时,只有写权限,没有读权限。

    段合并策略:

    检索过程:

    查询所有段中满足查询条件的数据,然后对每个段里查询的结果集进行合并,所以为了空值索引段里段的数量,必须定期进行段合并操作。但是如果每次合并所有的段,会造成资源浪费,所以,现根据段的大小进行分组,再将同一组的段进行合并,但是如果段特别大了,就不会再合并了。

  • 相关阅读:
    手机京东页面页面主体和头部搜索
    《转》冯森林:手机淘宝中的那些Web技术(2014年)
    轮播图片如何随着窗口的大小改变而改变
    移动WEB开发基础入门
    MVC的项目部署成应用程序或虚拟目录路径的问题
    jqgrid传入的json数据,赋值了但是没有在表格上显示
    在JavaScript中对HTML进行反转义
    Node.js 创建第一个应用
    Node.js 安装配置
    对ASP.NET程序员非常有用的85个工具
  • 原文地址:https://www.cnblogs.com/hekiraku/p/12054187.html
Copyright © 2011-2022 走看看