`
weareyou-006
  • 浏览: 1083 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

Lucene中使用的hash算法

阅读更多
最近一直在研究Lucene的源码,其中有许多设计到hash算法的地方。于是自己整理一下,以加深自己的理解。这只是我个人的理解。如果有不对的地方。希望大家勇于拍砖。

TermsHashPerField.java中有一个hash算法:
final char[] tokenText = termAtt.buffer();
    final int tokenTextLen = termAtt.length();

    // Compute hashcode & replace any invalid UTF16 sequences
    int downto = tokenTextLen;
    int code = 0;
    while (downto > 0) {
      char ch = tokenText[--downto];

      if (ch >= UnicodeUtil.UNI_SUR_LOW_START && ch <= UnicodeUtil.UNI_SUR_LOW_END) {
        if (0 == downto) {
          // Unpaired
          ch = tokenText[downto] = UnicodeUtil.UNI_REPLACEMENT_CHAR;
        } else {
          final char ch2 = tokenText[downto-1];
          if (ch2 >= UnicodeUtil.UNI_SUR_HIGH_START && ch2 <= UnicodeUtil.UNI_SUR_HIGH_END) {
            // OK: high followed by low.  This is a valid
            // surrogate pair.
            code = ((code*31) + ch)*31+ch2;
            downto--;
            continue;
          } else {
            // Unpaired
            ch = tokenText[downto] = UnicodeUtil.UNI_REPLACEMENT_CHAR;
          }           
        }
      } else if (ch >= UnicodeUtil.UNI_SUR_HIGH_START && (ch <= UnicodeUtil.UNI_SUR_HIGH_END ||
                                                          ch == 0xffff)) {
        // Unpaired or 0xffff
        ch = tokenText[downto] = UnicodeUtil.UNI_REPLACEMENT_CHAR;
      }

      code = (code*31) + ch;
    }

    int hashPos = code & postingsHashMask;

代码最后的hashPos是最终的hash值。如果仔细看一下的话,你就会发现上面代码的hash算法是不是非常的眼熟!
好好回忆一下自己是否见过,想起来了吧。是不是跟java自带的源码中的String的hashcode算法相似呢。呵呵。是否想起来了呢?如果没有,请赶紧温习一下java源码吧。呵呵。

分享到:
评论

相关推荐

    Lucene中的FST算法描述

    在FST构建的过程中,会使用到Hash算法来计算节点的hash值,并用这个值来判断该节点是否已经被存储在FSTbytes数组中。如果一个节点(例如node1)的hash值与HashMap中的某个key值匹配,那么该节点实际上已经存储在...

    高运算性能,低碰撞率的hash算法MurmurHash算法.zip

    MurmurHash算法由Austin Appleby创建于2008年,现已应用到Hadoop、libstdc 、nginx、libmemcached,Redis,Memcached,Cassandra,HBase,Lucene等开源系统。2011年Appleby被Google雇佣,随后Google推出其变种的...

    FST算法-关新全1

    FST的优化技术主要包括:使用FST HashMap来加快判断某个节点是否已经在FST bytes中,使用Hash算法来快速判断节点是否已经被写入到FST bytes中等方面。 FST算法是Lucene中一个核心算法,具有快速检索term信息、快速...

    lucene地理位置搜索所用jar包

    3. **地理编码与解码**:使用GeoHash或其他算法将经纬度转换为字符串,便于存储和搜索。GeoHash是一种空间数据结构,能将地理坐标点映射成字符串,便于索引和比较。 4. **设置查询**:创建一个Query对象,可以根据...

    FST算法解析.pdf

    - **Hash算法**: 在构建FST过程中,使用哈希表加快判断节点是否已存在。通过计算节点中所有Arc的信息(包括标签、目标节点、输出、是否为终止弧线等)生成哈希值,以此作为键值,节点在FSTBytes中的位置作为值。 ...

    数据库算法及Google搜索引擎算法的秘密.rar_algorithm_java search engine_搜索_数据库搜索_

    数据库算法和Google搜索引擎算法是信息技术领域中的核心组成部分,它们在数据管理和信息检索方面扮演着至关重要的角色。在本文中,我们将深入探讨这两个主题,并尝试揭示它们的秘密。 首先,让我们聚焦于数据库算法...

    分布式高并发.pdf

    一致性Hash算法是解决分布式系统中的负载均衡问题的有效方法。 十六、数据库设计规范 数据库设计规范包括基础规范、命名规范、字段设计规范等。 十七、数据库索引 数据库索引包括唯一索引、非唯一索引、主键索引...

    综合管廊中基于区块链驱动的数据存储机制研究.pdf

    而优化的 Hash 加密算法的运用,不仅加强了数据的不可篡改性,也提高了数据的安全性。由于哈希值的唯一性,任何对数据的非法篡改都会在哈希值的改变中得以显现。这为综合管廊数据的安全存储提供了一道防线,确保数据...

    LBS空间搜索架构的优化历程.1c18c6f0-7e53-11e6-831e-83ec0cef607e.pdf

    于是,自研LBS服务成为优化的另一条路径,特别是在使用GeoHash算法的基础上。GeoHash是一种将经纬度坐标转化为可排序、可比较的字符串编码的技术,广泛应用于各种数据库系统,如MongoDB、Lucene/Solr和PostgreSQL/...

    内存管理答案1

    Elasticsearch可能会使用堆内存来存储索引数据,使用堆外内存(Off-Heap)来减少GC压力,以及通过缓存策略来优化内存使用,如使用Lucene的内存缓冲区来提升写入性能。此外,Elasticsearch还会有内存分配策略,比如...

    网站架构技术

    分布式缓存的一致性hash算法 数据存储服务器集群的伸缩性设计 关系数据库集群的伸缩性设计 nosql数据库的伸缩性设计 随需应变:网站的可扩展性 构建可扩展的网站架构 利用分布式消息队列降低系统耦合性 ...

    elasticmaps-main-源码.rar

    ElasticMaps Main的源码中会包含GeoHash的生成和解码算法,以及相关的空间查询优化。 3. **Spatial Query**:ElasticMaps支持多种空间查询,如Within、BoundingBox、Distance等。源码中会详细阐述如何构建这些查询...

    ElasticSearch企业级应用实战

    因为词条唯一性,可以给词条创建索引,例如hash表结构索引。 倒排索引的搜索流程如下:用户输入条件,进行搜索,对用户输入内容分词,得到词条,拿着词条在倒排索引中查找,得到包含词条的文档id,拿着文档id到正向...

    minhash:这提供了用于b位MinHash算法的工具

    该库提供了用于b位MinHash算法的工具。 问题/问题 请提出。 (日本论坛在。) 安装 玛文 将以下依赖项放入pom.xml中: &lt; groupId&gt;org.codelibs &lt; artifactId&gt;minhash &lt; version&gt;0.2.0 参考 计算MinHash ...

    Java架构核心宝典.pdf

    Redis具有高速读写性能,支持多种数据类型如string、hash、list、set等,每种类型都有其特定的使用场景。此外,Redis的缓存雪崩、缓存穿透问题及其解决方法也是核心内容,还包括了渐进式ReHash的过程及其原因。渐进...

    072401MySQL索引2

    若需在事务环境下使用全文索引,可以考虑使用Sphinx或Lucene这样的外部搜索引擎。 创建索引的语法如下: ```sql CREATE INDEX index_name ON table_name(column_name(length)) [USING {BTREE|HASH}] COMMENT '...

    基于Python实现音乐播放器【100012083】

    在此次实验报告中将会...使用 jieba 与 lucene 对文本内容进行分词以此实现快速搜索,利用 SIFT 算法对图片进行特征提取,然后利用 Hash 对图片特征分类建立数据 库,在搜索过程中对待检索图片做同样操作以完成匹配。

    bigdata_elk.docx

    一个Elasticsearch集群由多个节点(node)组成,每个节点可以包含多个分片(shard),数据通过hash算法均匀分布。此外,Elasticsearch还引入了index(类似数据库)、type(类似表,但在6.x版本后被废弃)和document(类似记录...

    阿里腾讯京东等互联网面试-高级资深开发工程师P7.pdf

    14. **一致性Hash算法**: - 在分布式系统中,一致性Hash用于解决节点增减时数据迁移问题。 15. **数据库范式**: - 1NF、2NF、3NF是数据库设计中的规范化原则,减少数据冗余和异常。 16. **数据库开发规范**: ...

    后端架构师技术图谱.docx

    后端架构师技术图谱是IT领域中针对后端开发人员和架构师的重要参考资料,它涵盖了从基础的数据结构和算法到高级的并发控制、数据库、分布式系统等多个方面。以下是根据提供的内容提炼出的关键知识点: 1. **数据...

Global site tag (gtag.js) - Google Analytics