热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用lucene来遍历ES中的文档数据

2019独角兽企业重金招聘Python工程师标准es1.7.5中使用的是lucene4.10,通过研究其数据结构,明确其嵌套格式(nested)文档结构.对于一个分片(目录)

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

es 1.7.5 中使用的是lucene 4.10, 通过研究其数据结构, 明确其嵌套格式(nested)文档结构.  对于一个分片(目录)中的数据,是一个lucene索引结构,因此可以通过使用lucene api来读取这一个目录中的数据.实际上,在一个lucene索引结构中,不仅有倒排表还有顺序结构.因此我们可以通过某种方式来获取这个目录下面的所有文档完成遍历操作.

顺序结构的文档在lucene4.10中的组织是有规律的,文档id从0开始递增,前排文档的子文档,然后排其子文档对应的主文档. 如果索引子文档的field字段设置store为true.则在子文档所对应的doc id上可以相关值,否则需要在source字段中获取,至于如何解析source字段,本篇文章不做解释.

首先获取fields,然后针对某一个term(_uid)来获取所有文档(每个主文档都有一个唯一的uid).然后根据上面表述的特性就可以获取所有文档相关信息,进行相关处理.如果文档中涉及到删除的操作,需要加载删除数据的集合,然后将文档id进行过滤,剔除掉删除的记录.

Directory directory = FSDirectory.open(new File(path));Lucene40LiveDocsFormat lldf = new Lucene40LiveDocsFormat();IOContext context = IOContext.READ;SegmentInfos sifs = new SegmentInfos();sifs.read(directory);Iterator its = sifs.iterator();List bitss = new ArrayList();while (its.hasNext()) {SegmentCommitInfo info = its.next();if (info.hasDeletions())bitss.add(lldf.readLiveDocs(directory, info, context));}// directory.IndexReader r = IndexReader.open(directory);IndexSearcher is = new IndexSearcher(r);Fields fields = MultiFields.getFields(r);System.out.println(fields.size());Iterator it=fields.iterator();while(it.hasNext()){System.out.println(it.next());}System.out.println(fields.terms("commus.interactionIdx").getDocCount());int count = fields.terms("_uid").getDocCount();System.out.println(count);for (int i = 0; i

 


转:https://my.oschina.net/u/937015/blog/802004



推荐阅读
  • BeautifulSoup4 是一个功能强大的HTML和XML解析库,它能够帮助开发者轻松地从网页中提取信息。本文将介绍BeautifulSoup4的基本功能、安装方法、与其他解析工具的对比以及简单的使用示例。 ... [详细]
  • Activity跳转动画 无缝衔接
    Activity跳转动画 无缝衔接 ... [详细]
  • MVC框架下使用DataGrid实现时间筛选与枚举填充
    本文介绍如何在ASP.NET MVC项目中利用DataGrid组件增强搜索功能,具体包括使用jQuery UI的DatePicker插件添加时间筛选条件,并通过枚举数据填充下拉列表。 ... [详细]
  • [编程题] LeetCode上的Dynamic Programming(动态规划)类型的题目
    继上次把backTracking的题目做了一下之后:backTracking,我把LeetCode的动态规划的题目又做了一下,还有几道比较难的Medium的题和Hard的题没做出来,后面会继续 ... [详细]
  • 本文探讨了在Node.js环境中如何有效地捕获标准输出(stdout)的内容,并将其存储到变量中。通过具体的示例和解决方案,帮助开发者解决常见的输出捕获问题。 ... [详细]
  • 本文深入探讨了JLine库中的ConsoleReader.drawBuffer()方法的使用场景和具体实现,通过多个实际代码示例,帮助开发者更好地理解和应用此方法。 ... [详细]
  • 探讨行动的本质及其在个人成长中的作用,强调即时行动的重要性。 ... [详细]
  • 深入解析Android Activity生命周期
    本文详细探讨了Android中Activity的生命周期,通过实例代码和详细的步骤说明,帮助开发者更好地理解和掌握Activity各个阶段的行为。 ... [详细]
  • SQLite是一种轻量级的关系型数据库管理系统,尽管体积小巧,却能支持高达2TB的数据库容量,每个数据库以单个文件形式存储。本文将详细介绍SQLite在Android开发中的应用,包括其数据存储机制、事务处理方式及数据类型的动态特性。 ... [详细]
  • 字符、字符串和文本的处理之Char类型
    .NetFramework中处理字符和字符串的主要有以下这么几个类:(1)、System.Char类一基础字符串处理类(2)、System.String类一处理不可变的字符串(一经 ... [详细]
  • 本文探讨了Web API 2中特性的路由机制,特别是如何利用它来构建RESTful风格的URI。文章不仅介绍了基本的特性路由使用方法,还详细说明了如何通过特性路由进行API版本控制、HTTP方法的指定、路由前缀的应用以及路由约束的设置。 ... [详细]
  • 基于OpenCV的小型图像检索系统开发指南
    本文详细介绍了如何利用OpenCV构建一个高效的小型图像检索系统,涵盖从图像特征提取、视觉词汇表构建到图像数据库创建及在线检索的全过程。 ... [详细]
  • 本文详细介绍了Spring AOP注解的基本概念及其实现方式,并通过实例演示了如何在项目中使用这些注解进行面向切面的编程。旨在帮助开发者更好地理解和运用Spring AOP功能。 ... [详细]
  • GCC(GNU Compiler Collection)是GNU项目下的一款功能全面且高效的多平台编译工具,广泛应用于Linux操作系统中。本文将详细介绍GCC的特点及其基本使用方法。 ... [详细]
  • 构建Python自助式数据查询系统
    在现代数据密集型环境中,业务团队频繁需要从数据库中提取特定信息。为了提高效率并减少IT部门的工作负担,本文探讨了一种利用Python语言实现的自助数据查询工具的设计与实现。 ... [详细]
author-avatar
swaimprichett_556
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有