CN106605221B - 具有用于即时索引的方法的多用户搜索系统 - Google Patents

具有用于即时索引的方法的多用户搜索系统 Download PDF

Info

Publication number
CN106605221B
CN106605221B CN201580045069.9A CN201580045069A CN106605221B CN 106605221 B CN106605221 B CN 106605221B CN 201580045069 A CN201580045069 A CN 201580045069A CN 106605221 B CN106605221 B CN 106605221B
Authority
CN
China
Prior art keywords
document
index
tokens
indexed
server
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201580045069.9A
Other languages
English (en)
Other versions
CN106605221A (zh
Inventor
S·格尔
F·查斯塔格诺
A·阿格拉瓦尔
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Dropbox Inc
Original Assignee
Dropbox Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Dropbox Inc filed Critical Dropbox Inc
Publication of CN106605221A publication Critical patent/CN106605221A/zh
Application granted granted Critical
Publication of CN106605221B publication Critical patent/CN106605221B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2308Concurrency control
    • G06F16/2315Optimistic concurrency control
    • G06F16/2329Optimistic concurrency control using versioning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/13File access structures, e.g. distributed indices
    • G06F16/134Distributed indices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/30Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
    • G06F16/31Indexing; Data structures therefor; Storage structures
    • G06F16/316Indexing structures
    • G06F16/328Management therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/14Details of searching files based on file metadata
    • G06F16/148File search processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/21Design, administration or maintenance of databases
    • G06F16/219Managing data history or versioning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2358Change logging, detection, and notification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24564Applying rules; Deductive queries
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/30Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
    • G06F16/31Indexing; Data structures therefor; Storage structures
    • G06F16/313Selection or weighting of terms for indexing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/30Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
    • G06F16/31Indexing; Data structures therefor; Storage structures
    • G06F16/316Indexing structures
    • G06F16/319Inverted lists
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/80Information retrieval; Database structures therefor; File system structures therefor of semi-structured data, e.g. markup language structured data such as SGML, XML or HTML
    • G06F16/84Mapping; Conversion
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/93Document management systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/95Retrieval from the web
    • G06F16/953Querying, e.g. by the use of web search engines
    • G06F16/9535Search customisation based on user profiles and personalisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/62Protecting access to data via a platform, e.g. using keys or access control rules
    • G06F21/6218Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/20Natural language analysis
    • G06F40/279Recognition of textual entities
    • G06F40/284Lexical analysis, e.g. tokenisation or collocates
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/08Network architectures or network communication protocols for network security for authentication of entities
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/10Network architectures or network communication protocols for network security for controlling access to devices or network resources
    • H04L63/101Access control lists [ACL]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Software Systems (AREA)
  • Business, Economics & Management (AREA)
  • General Business, Economics & Management (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Computational Linguistics (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Library & Information Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Computing Systems (AREA)
  • Bioethics (AREA)
  • Artificial Intelligence (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

一种用于即时索引的多用户搜索系统包括:存储用于文档的当前版本的令牌集合的令牌存储库;令牌化器服务器,其对文档的新版本进行令牌化,并且生成用于文档的新版本的令牌集合;即时索引器,其基于所识别出的用于文档的新版本的令牌集合与用于文档的当前版本的令牌集合之间的差异确定将用来对文档进行索引的令牌,并且生成包括所述将用来对文档进行索引的令牌的索引变种;与时间标记相关联地存储所生成的索引变种的索引变种日记;以及索引变种服务器,其把来自与由索引服务器指定的时间标记相比更新的时间标记相关联的所生成的索引变种的将用来对文档进行索引的令牌从索引变种日记提供到索引服务器。

Description

具有用于即时索引的方法的多用户搜索系统
技术领域
本发明公开的技术总体上涉及信息取回计算机系统,更具体来说涉及具有用于即时索引的方法的多用户搜索系统。
背景技术
计算机是用于在海量信息当中搜索相关信息的非常强有力的工具。索引是用于利用计算机高效地识别大量信息当中的感兴趣信息的常见机制。典型的索引是关键字到从中提取或导出所述关键字的信息文档的有组织映射。作为一个实例,世界上的公共可访问网页的索引可以把网页中的单词映射到包含该单词的网页子集。
在实际的物理索引本身(例如存储在一台或多台计算机上的索引数据)与系统的用户之间,通常提供作为软件缓冲或层的搜索系统。实质上,搜索系统使得用户无需知道或者甚至关心底层索引细节。通常来说,来自用户的针对索引中的信息的所有请求都由搜索系统处理。举例来说,可以由搜索系统利用索引识别与用户的信息请求相关的文档,而完全不需要用户知道底层索引实现方式。通过这种方式,搜索系统为用户提供对于相关信息的访问,而无需关注信息如何被索引或访问。用于识别世界上的公共可访问网页当中的相关信息的一种众所周知的搜索系统是由Google Inc.(Mountain View,California)提供的GOOGLE因特网搜索引擎。
搜索系统的一项功能是回答搜索查询(或者简称作“查询”)。查询可以被定义成包括由一个或多个搜索项构成的集合的逻辑表达式,并且导致识别出索引文档的一个子集。例如考虑对于来自因特网搜索引擎的信息请求的应对。在操作中,该请求通常由客户端系统作为一项或多项超文本传输协议或“HTTP”请求发出,以用于从服务器计算机上的索引取回特定的搜索结果(例如包含单词“大学”和“篮球”的所有因特网网页的列表)。响应于该请求,搜索系统通常返回一个网页,其中包含去到被认为对于搜索项“大学”和“篮球”是最相关的那些因特网网页的超链接。
因特网搜索引擎非常适合于搜索在因特网上公共可用的所有世界上的信息。但是近来用户开始积累大量的“个人”数字信息,其在因特网上并不是公共可访问的,也无法通过因特网搜索引擎进行索引。这样的信息例如可以包括个人数字照片、学校和工作文档以及其他个人和私有数字信息。在一些实例中,用户的个人数字信息与一个已定义的用户群组共享。举例来说,雇员可以与其他同事共享工作文档,或者用户可以与朋友或家人共享数字照片。
用户近来开始存储和管理所有其个人数字信息的一种方式是通过使用云端数据存储服务。这样的服务允许用户从其各种末端用户计算设备在因特网或其他网络上可访问的服务器计算机上上传和存储器个人数字信息。在一些实例中,所述服务可以在末端用户计算设备与服务的服务器计算机之间同步信息,以便于用户在末端用户计算设备处的本地信息访问。一种众所周知的云端数据存储服务是由Dropbox Inc.(San Francisco,California)提供的DROPBOX内容管理服务。
云端数据存储服务的用户将认识到用以搜索和找到由此类服务托管的其个人数字信息的方式的价值。这样的个人数字信息通常不是因特网上公共可访问的。为此以及其他原因,因特网搜索引擎通常不足以满足这些用户的搜索需求。
在本节中所描述的方法是可以采取的方法,但不一定是先前已被设想到或已被采取的方法。因此,除非另行表明,否则不应当假设在本节中所描述的任何方法仅仅由于其被包括在本节中就有资格作为现有技术。
附图说明
图1是根据本发明的一些实施例的基本计算设备的方块图。
图2是根据本发明的一些实施例的用于控制计算设备的操作的基本软件系统的方块图。
图3是根据本发明的一些实施例的包括多用户搜索系统的客户端/服务器系统的方块图。
图4是根据本发明的一些实施例的多用户搜索系统的服务系统的方块图。
图5是根据本发明的一些实施例的碎片化(sharded)文档索引的索引碎片的方块图。
图6示出了根据本发明的一些实施例的用于多用户搜索系统的令牌存储库的可能模式。
图7是根据本发明的一些实施例的用于构造碎片化文档索引的多用户搜索系统的索引器的方块图。
图8示出了根据本发明的一些实施例的多用户搜索系统的索引服务器处的索引的可能生命周期。
图9是根据本发明的一些实施例的用于生成针对碎片化文档索引的索引变种的多用户搜索系统的索引器的方块图。
图10A和图10B包括根据本发明的一些实施例的多用户搜索系统的即时索引器的示例性操作的流程图。
图11A和图11B示出了根据本发明的一些实施例的即时索引器的示例性操作期间的多用户搜索系统的令牌存储库的各种可能的状态。
图12A和12B包括根据本发明的一些实施例的用于即时索引的处理的流程图。
图13A是根据本发明的一些实施例的发生改变的文档消息的方块图。
图13B是根据本发明的一些实施例的索引变种日记条目的方块图。
具体实施方式
在后面的描述中,出于解释的目的阐述了许多具体细节,以便提供关于所公开的技术的透彻理解。但是应当认识到,可以在没有这些具体细节的情况下实践所公开的技术。此外,通过方块图的形式示出了众所周知的结构和设备,以避免不必要地模糊所公开的技术。关于流程图,流程图内的方块既可以表示方法步骤也可以表示用于实施方法步骤的装置单元。取决于当前的特定实现方式的需求,相应的装置单元可以通过硬件、软件、固件或其组合来配置。
还应当理解的是,虽然在这里可能使用了“第一”、“第二”等术语来描述各个单元,但是这些单元不应当受限于这些术语。这些术语仅仅被用来把一个单元与另一个单元进行区分。举例来说,第一设备可以被称作第二设备,并且类似地第二设备可以被称作第一设备,而不会背离本发明的范围。第一设备和第二设备都是设备,但不是相同的设备。
这里所使用的术语仅仅是用于描述特定实现方式的目的,而不意图限制权利要求书。除非上下文明确地另有所指,否则在本说明书和所附权利要求书中使用的单数形式“一个”、“一项”也意图包括复数形式。还应当理解的是,这里所使用的术语“和/或”指代并且涵盖所列出的其中一个或多个相关联的项目的任何和所有可能的组合。还应当理解的是,在本说明书中使用的术语“包括”表明所陈述的特征、整数、步骤、操作、单元和/或组件的存在,而不排除存在或添加一个或多个其他特征、整数、步骤、操作、单元、组件和/或其组合。
取决于上下文,术语“如果”可以被解释成意味着“当…时”或者“在…情况下”或者“响应于确定…”或者“响应于检测到…”。类似地,取决于上下文,短语“如果确定…”或者“如果检测到[所陈述的条件或事件]”可以被解释成意味着“在确定…情况下”或者“响应于确定…”或者“在检测到[所陈述的条件或事件]的情况下”或者“响应于检测到[所陈述的条件或事件]”。
总览
本发明公开了具有用于文档的即时索引的方法的多用户计算机搜索系统。所述文档例如可以包括由用户最近创建或者最近修改的文档。除了其他方面之外,各个实施例特别允许用户在文档被创建或修改之后不久(例如几分钟内)对文档实施全文本和文件名搜索。
除了其他方面之外,本发明的各个实施例促进在多用户计算机搜索系统中对于用户的个人文档的全文本和文件名搜索,其中时时创建新的文档并且更新现有文档。
除了其他方面之外,本发明的各个实施例实现了利用计算机进行信息取回的技术领域内的改进。
除了其他方面之外,本发明的各个实施例改进了由云端数据存储服务提供商提供的多用户云端数据存储服务。
除了其他方面之外,本发明的各个实施例改进了多用户计算机搜索系统的运转。
根据一个实施例,令牌存储库存储对应于文档的当前版本的令牌集合。一种用于即时索引的方法包括:对文档的新版本进行令牌化,以及生成对应于文档的新版本的令牌集合。所述方法还包括:识别对应于文档的新版本的令牌集合与对应于文档的当前版本的令牌集合之间的差异,基于所识别出的差异确定将用来对文档进行索引的令牌,生成包括将用来对文档进行索引的令牌的索引变种,把所生成的索引变种与时间标记相关联地存储,以及向索引服务器提供与比所指定的时间标记更新的时间标记相关联的为所述索引服务器生成的索引变种。
在一个方面中,所述方法还包括:根据对应于文档的新版本的令牌集合与对应于文档的当前版本的令牌集合之间的所识别出的差异确定将不再用来对文档进行索引的令牌,以及生成包括将不再用来对文档进行索引的令牌的索引变种。
在另一个方面中,所述方法还包括:在发送自索引服务器的网络请求中接收指定的时间标记。
在另一个方面中,所述方法还包括:把所生成的索引变种附加到分布式提交日志。
在另一个方面中,所述方法还包括:响应于对所述文档当中的一个文档的新版本进行令牌化并且为之生成令牌集合,将一条消息放置在消息队列中。所述消息包括该文档的标识符。所述方法还包括:把所述消息从消息队列中退出,以及处理所述退出队列的消息。
在另一个方面中,所述方法还包括:确定将与所生成的索引变种相关联的时间标记。
在另一个方面中,所述方法还包括:把对应于文档的新版本的所生成的令牌集合存储在令牌存储库中。
在另一个方面中,所述方法还包括:基于所生成的索引变种,在索引服务器处更新存储器中的增量索引。
在另一个方面中,所述方法还包括:索引服务器周期性地轮询新的索引变种。
在其他方面中,本发明涵盖被配置成实施前述步骤的计算机系统和计算机可读介质。
基本计算机系统硬件和软件
所公开的技术可以被实施在一个或多个计算设备上。这样的计算设备可以通过多种形式来实施,其中包括而不限于客户端、服务器计算机、网络设备、移动设备、蜂窝电话、智能电话、膝上型计算机、台式计算机、工作站计算机、个人数字助理、刀片式服务器计算机、大型计算机以及其他类型的计算机。后面所描述的计算设备及其组件(包括其连接、关系和功能)意图仅仅是示例性的,而不意图限制在本说明书中描述的所公开的技术的实现方式。适合于实施所公开的技术的其他计算设备可以具有不同的组件,其中包括具有不同连接、关系和功能的组件。
基本计算设备
现在参照图1,其是根据本发明的一些实施例的适合于实施所公开的技术的基本计算设备100的方块图。计算设备100包括用于对主存储器106进行寻址并且用于在设备100的各种组件之间传输数据的总线102或其他通信机制。计算设备100还包括与总线102耦合以用于处理信息的硬件处理器104。硬件处理器104可以是通用微处理器、芯片上系统(S^C)或者适合于实施所描述的技术的其他处理器。
主存储器106,比如随机存取存储器(RAM)或其他动态存储设备,耦合到总线102以用于存储信息以及将由处理器104执行的指令。主存储器106还可以被用于在将由处理器104执行的指令的执行期间存储临时变量或其他中间信息。这样的指令当被存储在可由处理器104访问的非瞬时性存储介质中时,使得计算设备100变成被定制成实施在所述指令中规定的操作的专用计算设备。
计算设备100还包括耦合到总线102的只读存储器(ROM)108或其他静态存储设备以用于存储静态信息以及用于处理器104的指令。
大容量存储设备110耦合到总线102以用于在固定或可移除介质上持久地存储信息和指令,比如磁性、光学、固态、磁光、闪存或者任何其他可用的大容量存储技术。所述大容量存储装置可以在网络上共享,或者可以是专用的大容量存储装置。通常来说,大容量存储设备110(例如设备的主硬盘)存储用于引导计算设备的操作的程序和数据的主体,其中包括操作系统、用户应用程序、驱动程序和其他支持文件以及所有种类的其他数据文件。
计算设备100可以通过总线102耦合到显示器112,比如液晶显示器(LCD)或其他电子视觉显示器,以用于向计算机用户显示信息。显示器112还可以是用于向处理器104传达触摸手势(例如手指或触笔)的触敏显示器。
输入设备114(包括字母数字和其他按键)耦合到总线102以用于向处理器104传达信息和命令选择。
另一种类型的用户输入设备是光标控制116,比如鼠标、轨迹球或者光标方向键,其用于向处理器104传达方向信息和命令选择并且用于控制显示器112上的光标移动。该输入设备通常具有两个轴中的两个自由度,也就是第一轴(例如x)和第二轴(例如y),其允许该设备指定平面中的位置。
计算设备100可以利用定制的硬连线逻辑、一个或多个专用集成电路(ASIC)、一个或多个现场可编程门阵列(FPGA)、固件或者程序逻辑来实施这里所描述的方法,其与计算设备相组合使得或者将计算设备100编程为专用机器。
这里所公开的方法还可以由计算设备100响应于处理器104执行包含在主存储器106中的一条或多条指令的一个或多个序列来实施。这样的指令可以从另一个存储介质(比如存储设备110)被读取到主存储器106中。包含在主存储器106中的指令序列的执行使得处理器104实施这里所描述的处理步骤。在替换实施例中,可以使用硬连线大容量存储设备110以替代软件指令或者与之相组合。
这里所使用的术语“存储介质”指的是存储使得计算设备按照特定方式操作的数据和/或指令的任何非瞬时性介质。这样的存储介质可以包括非易失性介质和/或易失性介质。非易失性介质例如包括光盘、磁盘或固态驱动器,比如存储设备110。易失性介质包括动态存储器,比如主存储器106。存储介质的常见形式例如包括软盘、柔性盘、硬盘、固态驱动器、磁带或任何其他磁性数据存储介质、CD-ROM、任何其他光学数据存储介质、具有孔洞图样的任何物理介质、RAM、PROM、EPROM、FLASH-EPROM、NVRAM、任何其他存储器芯片或卡盒。
存储介质不同于传送介质,但是可与传送介质相结合来使用。传送介质参与在存储介质之间传输信息。举例来说,传送介质包括同轴电缆、铜线和光纤,其中包括构成总线102的连线。传送介质还可以采取声波或光波的形式,比如在无线电波和红外数据通信期间生成的那些波。
各种形式的介质可以涉及向处理器104载送一条或多条指令的一个或多个序列以供执行。举例来说,指令可以初始地被携带在远程计算机的磁盘或固态驱动器上。远程计算机可以把指令加载到其动态存储器中,并且利用调制解调器通过电话线发送指令。计算设备100本地的调制解调器可以在电话线上接收数据,并且使用红外传送器把数据转换成红外信号。红外检测器可以接收在红外信号中载送的数据,并且适当的电路可以把数据放置在总线102上。总线102将数据载送到主存储器106,处理器104从中取回并且执行指令。由主存储器106接收到的指令可以在由处理器104执行之前或之后可选地被存储在存储设备110上。
计算设备100还包括耦合到总线102的通信接口118。通信接口118提供与连接到本地网络122(例如以太网、无线局域网、蜂窝电话网络、Bluetooth无线网络等等)的有线或无线网络链接120的双向数据通信耦合。通信接口118发送和接收载送表示各种类型的信息的数字数据流的电气、电磁或光学信号。举例来说,通信接口118可以是有线网络接口卡、具有集成无线电天线的无线网络接口卡或者调制解调器(例如ISDN、DSL或有线电视调制解调器)。
网络链接120通常通过一个或多个网络提供去到其他数据设备的数据通信。举例来说,网络链接120可以通过本地网络122提供去到托管计算机124或者由因特网服务提供商(ISP)126操作的数据装备的连接。ISP 126又通过现在通常被称作“因特网”128的世界范围分组数据通信网络提供数据通信服务。本地网络122和因特网128使用载送数字数据流的电气、电磁或光学信号。向/从计算设备100载送数字数据的经过各种网络的信号以及网络链接120上的经过通信接口118的信号是传送介质的示例性形式。
计算设备100可以通过本地网络122、因特网128、ISP 126、网络链接120以及(多个)通信接口118发送消息和接收数据,其中包括程序代码。在因特网实例中,服务器计算机130可以通过因特网128、ISP 126、本地网络122和通信接口118传送对于应用程序所请求的代码。
所接收到的代码可以在其被接收时由处理器104执行,并且/或者被存储在存储设备110中,或者被存储在其他非易失性存储装置中以供后来执行。
基本软件系统
现在参照图2,其是根据本发明的一些实施例的用于控制计算设备100的操作的基本软件系统200的方块图。如图所示,计算机软件系统200被提供来引导计算设备100的操作。软件系统200被存储在系统存储器(RAM)106和固定存储装置(例如硬盘)110上,其包括内核或操作系统(OS)210。OS 210管理计算机操作的低层级方面,其中包括管理处理的执行、存储器分配、文件输入和输出(I/O)以及设备I/O。一个或多个应用程序202(例如202A、202B、202C…202N)可以被“加载”(例如从固定存储装置110传输到存储器106中)以供系统200执行。在一些实例中,应用程序202或者意图在设备100上使用的其他软件还可以被存储为可下载计算机可执行指令的集合,以用于例如从因特网位置(例如从web服务器)下载和安装。
软件系统200可以包括图形用户界面(GUI)215,其用于通过图形(例如“点击”或“触摸手势”)方式接收用户命令和数据。这些输入又可以由系统200根据来自操作系统210和/或应用程序202的指令对其采取动作。GUI 215还用来显示来自OS 210和应用程序202的操作结果,用户可以随之提供附加的输入或终止会话(例如登出)。
OS 210可以直接在设备100的裸硬件(例如处理器104)上直接执行。或者,可以在裸硬件与OS 210之间设置系统管理程序(hypervisor)或虚拟机监视器(VMM)230。在这种配置中,VMM 230充当OS 210与设备100的裸硬件之间的软件“缓冲”或虚拟化层。
如果存在的话,VMM 230实例化并且运行虚拟机实例(“客户机(guestmachine)”)。每一台客户机包括“客户”操作系统(比如OS 210),以及被设计成在客户操作系统上执行的一个或多个应用程序(比如应用程序202)。VMM 230为客户操作系统给出虚拟操作平台,并且管理客户操作系统的执行。在一些实例中,VMM 230可以允许客户操作系统如同直接运行在设备100的裸硬件上那样运行。在这些实例中,被配置成直接在裸硬件上执行的客户操作系统的相同版本还可以能够在没有修改或重新配置的情况下在VMM 230上执行。换句话说,在一些实例中,VMM 230可以为客户操作系统提供完全硬件和CPU虚拟化。在其他实例中,客户操作系统可以被特别设计或配置成在VMM230上执行以获得高效率。在这些实例中,客户操作系统“知晓”其在虚拟机监视器上执行。换句话说,在一些实例中,VMM230可以为客户操作系统提供半虚拟化(para-virtualization)。
前面描述的计算机硬件和软件是出于说明可以被采用来实施所公开的技术的基本底层计算机组件的目的而给出的。但是所公开的技术不限于任何特定的计算环境或计算设备配置。相反,所公开的技术可以被实施在能够支持在后面详细给出的所公开的技术的任何类型的系统架构或处理环境中。
客户端/服务器多用户搜索系统组件
现在参照图3,其是根据本发明的一些实施例的客户端/服务器系统300的方块图。客户端/服务器系统300包括一台或多台服务器320(在这里统称作“多用户搜索系统320”)。此外,客户端/服务器系统300还包括通过网络330连接到一台或多台服务器325(在这里统称作“服务系统325”)的一个或多个客户端310。具体来说,客户端310包括利用传统网络连接到一台或多台服务器326(在这里统称作“搜索前端326”)的一个或多个末端用户计算设备311。在一个示例性实施例中,末端用户计算设备311本身可以包括多个末端用户个人计算设备,比如运行例如MICROSOFT WINDOWS(例如XP、VISTA、7、8等等)、MAC OS X、LINUX(例如UBUNTU、FEDORA等等)、IOS、ANDROID、BLACKBERRY OS等传统操作系统的前面描述的设备100。
服务系统325以及一台或多台其他服务器321(在这里统称作“建立系统321”)在一个示例性实施例中是前面提到的DROPBOX内容管理服务的一部分,其通常作为一个或多个独立处理(例如独立于客户端)操作,并且在例如UNIX、LINUX等服务器操作系统下运行。建立系统321包括令牌存储库324、索引器服务器323(或者仅仅是“索引器323”)和令牌化器322(或者仅仅是“令牌化器322”)。除了搜索前端326之外,服务系统325还包括查询处理器327和文档索引器328。
取决于当前的特定实现方式的需求,多用户搜索系统320的服务器(包括建立系统321的服务器和服务系统325的服务器)可以被实施成服务器计算机(例如图1的设备100)或者被实施成虚拟机实例。在多用户搜索系统320的服务器被实施成虚拟机实例的情况下,仍然可以有托管(执行)“虚拟”服务器的底层服务器计算机。但是在虚拟服务器与服务器计算机之间不一定存在一一对应。举例来说,一台服务器计算机可以托管多台虚拟服务器。
除非上下文明确地另有所指,否则在本说明书和所附权利要求书中使用的单数形式“服务器”也意图包括复数形式。举例来说,根据当前的特定实现方式的需求,多用户搜索系统320的“服务器”可以实际上通过作为彼此的镜像或复制品的多台服务器实施,以用于负荷平衡、故障控制转移(failover)、冗余性、高可用性以及/或者其他目的。
在操作中,客户端310向搜索前端326发送查询332,并且从搜索前端326接收查询应答334。可以在网络请求中在搜索前端326处接收查询332,并且在针对网络请求的网络响应中从搜索前端326发送应答334。网络请求和网络响应可以在网络数据分组中通过网络330被接收/发送。在本发明的一些实施例中,根据互联网协议(IP)对网络数据分组进行格式化。网络请求和网络响应还可以根据应用层联网协议被接收/发送。在一些实施例中,应用层联网协议是超文本传输协议(HTTP)或安全超文本传输协议(HTTPS)。举例来说,可以在一项或多项HTTP或HTTPS请求中接收请求332,并且在一项或多项HTTP或HTTPS响应中发送应答334。
网络330可以包括若干传统有线或无线网络系统,其中例如包括蜂窝电话网络、局域网(LAN)、广域网(WAN)、因特网等等。服务系统325和建立系统321及其服务器还可以通过一个或多个IP网络和/或其他适当类型的数据通信网络互连,并且还可以使用HTTP和/或HTTPS和/或其他适当的应用层协议彼此通信。
搜索查询332可以包括搜索表达式。搜索表达式的句法可以包括由一个或多个查询令牌构成的序列,其可能通过一个或多个布尔运算符(例如AND(与)、OR(或)、NOT(非)等等)关联在一起。令牌可以被定义成由一个或多个字符构成的序列。可以根据传统字符编码方案(例如ASCII、UTF-8等等)对令牌中的字符进行编码。
查询令牌可以被定义成出现在搜索查询332中的令牌。例如考虑简单的联合查询332:[baguette fromage](没有封闭括号)。满足该查询332的文档可以包含令牌“baguette”和令牌“fromage”全部二者,其在文档340中不一定彼此相邻,并且令牌“baguette”在文档340中不一定出现在令牌“fromage”之前。但是与满足查询332的其他文档340相比,包含彼此接近的令牌“baguette”和“fromage”或者与之相关联并且其中令牌“baguette”处于令牌“fromage”之前的文档340可以被认为是更加相关的。
从搜索前端326返回到客户端(例如末端用户计算设备311A)的针对搜索查询332的查询应答334可以包括通过相关性排序的搜索应答概要列表。每一个这样的概要可以对应于由查询处理器327在满足搜索查询332的文档索引328中识别出的文档340。搜索应答概要例如可以包括:相应文档的标识符(例如名称、标题等等),相应文档的简短描述(例如提纲、摘要、摘录、片段等等),用于下载、查看或者在相应文档上采取某种其他用户动作的交互式超链接(例如统一资源定位符(URL)),并且可能还有关于相应文档340的其他有用信息(例如相应文档的缩略图)。例如可以在末端用户计算设备上执行的web浏览器应用中的网页上向末端用户计算设备的用户呈现所述概要列表,或者例如在末端用户计算设备上执行的应用(例如移动应用)的另一个图形用户界面中呈现。
在搜索前端326处接收到的搜索查询332可以由查询处理器327处理。查询处理器327可以咨询文档索引328以识别满足搜索查询332的文档。可以在应当334中返回去到由查询处理器327识别出的满足搜索查询332的文档的参考(例如超链接)。由用于处理查询332的查询处理器327实施的本发明的一些实施例中的一种技术可以是如在后面更加详细地描述的那样。
在某些情况下,搜索查询332是“完成”搜索查询332。完成搜索查询332可以被定义成包括由一个或多个查询令牌构成的序列的搜索查询332,其中一个查询令牌是不完整的。举例来说,当末端用户计算设备的用户正处于输入(例如通过键入)完成搜索查询332的其中一个查询令牌当中时(例如处于输入过程中),可以从末端用户计算设备(例如311A)向搜索前端326提交完成搜索查询332。在这种情况下,针对完成查询332的应答334可以包括由查询处理器327基于完成查询332在文档索引328中识别出的针对完成搜索查询332的可能完成的列表。
完整的完成查询332中的查询令牌在这里被称作“完整令牌”。不完整的完成查询332中的查询令牌在这里被称作“完成令牌”。因此,完成查询还可以被定义成包括完成令牌的查询332。
完成查询332可以包括仅仅单个字符或者多于一个字符。例如在完成查询332[p](没有封闭括号)中,可能没有完整令牌,并且令牌“p”可以是完成令牌。完成查询332可以替换地包括一个或多个完整令牌。例如在完成查询332[private se](没有封闭括号)中,令牌“private”可以完整令牌,并且令牌“se”可以是完成令牌。
通常来说,完成查询332的令牌序列中的最后一个令牌(或者如果在序列中仅有一个令牌的话则是仅有的令牌)是完成令牌。这常常是因为用户按照其出现在序列中的相同顺序输入完成查询332中的各个令牌。但是完成查询332的最后一个令牌之外的其他令牌可以是完成令牌。举例来说,用户可以在他或她的末端用户计算设备(例如311A)处移动输入光标以便编辑先前输入的令牌。举例来说,用户可以在第一时间输入查询332[solved twoproblems](没有封闭括号)。后来,用户可以移动输入光标以便用“th”替换令牌“two”,从而生成完成查询[solved th problems]。在该示例性完成查询332中,第一个令牌“solved”和最后一个令牌“problems”可以是完整令牌,并且第二个令牌“th”可以是完成令牌。
在本发明的一些实施例中,查询332在包括查询332的网络请求中被标示成完成查询332。举例来说,网络请求可以表明查询332的查询令牌是完成令牌。对于完成令牌的标识可以由执行在用户的末端用户计算设备(例如311A)处的软件进行。举例来说,软件可以在用户把查询332的令牌的字符输入(例如利用物理键盘或软键盘)到呈现在用户的末端用户计算设备处的搜索用户界面中时向搜索前端326发送包括查询332的网络请求。通过这样做,软件可以在网络请求中标志、标记、标识或者通过其他方式表明(例如利用元数据)用户正在输入的令牌是完成令牌。在本发明的一些实施例中,执行在用户的末端用户计算设备处的软件是JAVASCRIPT软件或者其他web浏览器客户端侧脚本化语言软件,并且在用户的web浏览器的窗口中显示的网页上呈现搜索用户界面。在本发明的一些实施例中,执行在用户的末端用户计算设备处的软件是驱动用户的末端用户计算设备处的搜索用户界面的移动应用或其他专用软件应用。
针对完成搜索查询332的可能完成可以被定义成由通过文档索引328索引的至少一个文档340所满足并且完成所述完成查询332的搜索查询332。举例来说,由通过文档索引328索引的至少一个文档340所满足的搜索查询332[solved two problems](没有封闭括号)可以是针对完成搜索查询332[solved two prob](没有封闭括号)的可能完成。作为对于满足完成查询332的文档340的搜索应答概要列表的补充或替代,可以在应答334中提供针对完成查询332的可能完成的列表。由用于处理完成查询332的查询处理器327采用的本发明的一些实施例中的一种技术可以是如在后面更加详细地描述的那样。
不是完成查询332的查询332在这里有时可以被称作“未完成”查询332,以便把所述查询332与完成查询332进行区分。未完成查询332还可以被定义成仅包含完整令牌并且不包含任何完成令牌的查询332。当一般性地提到查询332时,在这里可以涉及“查询332”或“搜索查询332”而没有前面的“完成”或“未完成”修饰语。除非在上下文中能够明显看出另有所指,否则这里关于查询332的描述通常涉及完成查询332和未完成查询332全部二者。
文档340可以被定义成包含文本内容(例如字符数据)和/或与文本内容相关联(例如文本元数据)的数字信息的总集。仅仅作为一些实例,字处理文档340常常包含文本内容(例如文档的所写作的单词和语句),电子数据表文档340可以包含具有单词和数字的形式的文本上下文,并且数字图像文档340(例如数字照片)可以在其标题中包含文本内容(例如在可交换图像文件格式(Exif)中)。附加地或替换地,数字图像文档340可以与具有文本元数据标签或者关于图像内容的其他文本描述的形式的文本内容相关联。这些仅仅是可能的文档类型的一些实例,并且其他类型的文档也落在本发明的范围内。
在一些实例中,文档340对应于具有文件类型的文件。可以是文档的一些文件类型包括而不限于图像文件(例如jpg、.tiff、.gif)、音乐文件(例如.mp3、.aiff、.m4a、.wav)、电影文件(例如.mov、.mp4、.m4v)、字处理文件(例如.doc、.docx、.pages)、演示文件(例如.ppt、.pptx、.key)电子数据表文件(例如.xls、.xlsx、.numbers)、网页文件(例如.htm、.html)、文本文件(例如.txt)以及包含和/或与文本相关联的任何其他类型的文件。
文档340可以与描述文档内容的文本上下文相关联。该相关联的文本内容有时被称作对应于文档的“文本元数据”。举例来说,文档340的文件名可以是对应于文档340的文本元数据。作为另一个实例,对应于数字图像文档的文本元数据可以通过对于图像的计算机分析产生(例如光学字符辨识(OCR)、面部辨识算法等等)。对应于文档340的其他形式的文本元数据例如可以包括从参考文档340(例如通过超链接)、提到文档340(例如在社交网络帖子中)或者讨论文档340(例如在博客和/或用户评论帖子中)的网页获得的关于文档340的文本内容。出于这里的描述的目的,对应于文档340的文本元数据可以被视为文档340的文本内容的一部分并且被包含(发生)在其中。
文档340还可以具有多个版本,其中一个版本被视为当前版本。举例来说,用户可以使用字处理程序创建并保存字处理文档340的第一版本。一段时间之后,用户可以修改文档340的第一版本,并且保存包含修改的文档340的第二版本。或者,文档340可以在同一时间只具有一个版本,其被视为当前版本。
文档索引328可以包括一个或多个字典和记录(postings)对。一对的字典可以存储索引令牌,并且还可以对于每一个索引令牌包括指向该对的记录中的记录列表的指针。举例来说,所述指针可以是记录列表被存储在该处的易失性或非易失性存储器中的位置的地址。
索引令牌可以被定义成在文档索引328中借以对文档340进行索引的令牌。除了索引令牌之外,字典还可以存储对应于索引令牌的令牌属性,比如令牌的文档频率。对应于索引令牌的令牌属性可以由查询处理器327使用来改进查询处理效率和搜索结果排序。
对应于索引令牌的记录列表可以存储令牌在其中发生的一个或多个文档340的一个或多个文档标识符的列表,并且还可以存储对应于在记录列表中标识出的文档340的文档-令牌属性,例如令牌在文档340中的频率或者令牌在文档340内的(多个)位置。对应于记录列表中的文档340的文档-令牌属性也可以由查询处理器327使用来改进查询处理效率和搜索结果排序。
在处理查询332时,查询处理器327可以基于查询332中的查询令牌在文档索引328的字典中找到索引令牌。举例来说,对于例如查询332[solved two problems](没有封闭括号),查询处理器327可以在字典中找到索引令牌“solved”、“two”和“problems”。查询处理器327可以利用与在字典中找到的索引令牌相关联的指针取回对应于所找到的索引令牌的记录列表。举例来说,查询处理器327可以从与字典相关联的文档索引328的记录取回对应于索引令牌“solved”、“two”和“problems”的记录列表。
查询处理器327可以使用合并算法合并所取回的记录列表,以便识别满足查询332的文档340。举例来说,假设对于索引令牌“solved”取回的记录列表识别出文档D2和D3,对于索引令牌“two”取回的记录列表识别出文档D2,并且对于索引令牌“problems”取回的记录列表识别出文档D2和D3。查询处理器327随后可以根据合并算法合并这三个记录列表,从而把文档D2识别成包含全部所找到的索引令牌。对于合并记录列表可以使用多种不同的合并算法,本发明不限于任何特定的合并算法。举例来说,合并算法可以通过将指针交织推进经过多个记录列表当中的每一个来组合多个记录列表。
查询处理器327不限于仅处理简单的联合查询332,并且查询处理器327可以处理更加复杂的查询332。举例来说,查询处理器327可以处理以下示例性类型的查询332:查询A:[(two or three)NOT problems],查询B:[two three problems],查询C:[(two three)problems],以及查询D:[(two OR three)(problems OR solutions)]。在封闭括号[]内的每一个前述示例性查询332中,封闭括号[]不是查询的一部分。查询A等效于查询332[(twoor three)AND NOT problems],查询B等效于布尔查询332[two AND three ANDproblems],查询C等效于布尔查询332[(two AND three)AND problems],并且查询D等效于布尔查询332[(two OR three)AND(problems OR solutions)]。在前述示例性查询332中,AND OR NOT()是布尔运算符。
在本发明的一些实施例中,文档索引328被水平划分(例如碎片化)在服务系统325的多台索引服务器上,其中每一台索引服务器存储文档索引328的一部分(例如一个碎片)。可以使用多种不同技术将索引328水平划分(例如碎片化)在各台索引服务器上。在本发明的一些实施例中,文档索引328通过“文档命名空间”被碎片化。
文档命名空间可以被定义成处于共同访问控制下的一个或多个文档340的总集。所述共同访问控制可以是基于显式和/或隐式许可,其规定和/或表明哪一个(哪些)用户和/或用户群组能够访问文档命名空间中的文档340,以及(多个)用户和/或(多个)用户群组在属于文档命名空间的文档340上具有何种访问(例如读取访问、写入访问、共享访问、预览访问、下载访问等等当中的一项或多项)。显式许可例如可以采取一个或多个访问控制列表(ACL)和/或与文档命名空间(或其标识符)相关联的其他数据的形式,其规定和/或表明哪一个(哪些)用户和/或用户群组能够访问文档命名空间中的文档340,以及(多个)用户和/或(多个)群组在文档命名空间中的文档340上具有何种访问。隐式许可的一个实例可以是:用户能够访问与该用户的账户(或其标识符)相关联的文档命名空间中的所有文档340。
在一个示例性实施例中,文档命名空间包括与对于云端数据存储服务(例如前面提到的DROPBOX内容管理服务)所持有的用户账户相关联的文档340。通过针对账户成功进行认证(例如通过有效的用户名/口令),用户隐含地能够访问与该用户的账户相关联的文档命名空间中的文档340。
在一个示例性实施例中,文档命名空间包括属于在多个用户账户之间共享的一个或多个文档340的总集的文档340,其中所述多个用户账户是对于云端数据存储服务所持有的,比如前面提到的DROPBOX内容管理服务。在一些实例中,所述文档总集可以被称作“共享文件夹”。通过针对与之共享文档总集的账户成功进行认证,用户能够访问共享文档命名空间中的文档。
根据本发明的一些实施例,其中通过文档命名空间共享文档索引328,服务系统325的多台索引服务器当中的每一台对属于一个或多个文档命名空间的文档340进行索引。在本发明的一些实施例中,文档命名空间的标识符被用作碎片关键字,以便确定对该文档命名空间中的文档340进行索引的索引服务器。在一个非限制性的示例性实施例中,文档索引328对超过四亿(400,000,000)个文档命名空间中的文档进行索引。
文档340可以包括由建立系统321提供或使其可用于处理或者在文档索引328中被索引的任何文档340。建立系统321从文档340构造文档索引328的索引数据库文件351。建立系统321还从文档340生成针对文档索引328的索引变种352。
索引数据库文件351可以包括一起索引一个或多个文档340的字典和记录对。非常一般来说,索引数据库文件351内的数据可以被结构化成关键字-数值对的总集(例如关联阵列),其中关键字对应于字典的索引令牌,并且数值对应于记录的记录列表。在本发明的一些实施例中,一个索引数据库文件351对一个文档命名空间中的文档340进行索引。在本发明的一些实施例中,为了减少文档索引328的索引数据库文件351的数目,一个索引数据库文件351对多个文档命名空间中的文档340进行索引。由一个索引数据库文件351索引的多个文档命名空间在这里有时被称作文档命名空间的“文档命名空间群组”。
由建立系统321构造文档索引328的索引数据库文件351可以涉及由令牌化器322生成令牌集合,这是通过对文档340进行令牌化并且把所生成的令牌集合存储在令牌存储库324中实现的。索引器323随后可以基于所生成的令牌集合生成索引数据库文件351。索引器323把所生成的索引数据库文件351提供到服务系统325,以供作为文档索引328的一部分存储在服务系统325的索引服务器上。由建立系统321实施来从文档340构造文档索引328的索引数据库文件351的本发明的一些实施例中的一种技术可以是如这里所描述的那样。
由建立系统321从文档340生成针对文档索引328的索引变种352可以涉及由令牌化器322在从最近创建或最近修改的文档340生成令牌集合之后通知索引器323。举例来说,文档340可能是由末端用户计算设备311的用户最近创建或最近修改的。当被通知最近创建的文档340时或者当被通知经过修改的文档340时,索引器323基于在令牌存储库324中对于该文档所存储的一个或多个令牌集合生成对应于该文档的索引变种352。在一些实例中,例如当文档已被修改时,所生成的索引变种352反映出为经过修改的文档生成的令牌集合与为文档的先前版本生成的令牌集合之间的差异。所生成的索引变种352可以被提供到服务系统325,所述服务系统325随后将其应用于文档索引328。由建立系统321实施来从最近创建和修改的文档340生成针对文档索引328的索引变种352的本发明的一些实施例中的一种技术可以是如这里所描述的那样。
令牌化器322通过对文档340的文本内容进行令牌化而产生令牌集合。对文档的文本内容进行令牌化可以包括获得文档的字符序列。取决于文档数据的格式,可以由令牌化器322使用多种技术来获得文档的字符序列。举例来说,所使用的一种或多种技术可以包括根据文档的字符编码方案(例如ASCII、Unicode UTF-8、MICROSOFT WORD、ADOBE PDF等等)对文档进行解码,以及/或者根据文档是否被压缩(例如通过ZIP压缩)对文档进行解压缩。
一旦获得文档的字符序列,令牌化器322将字符序列划分成被称作令牌的断片,并且可能同时在令牌上实施语言学处理。语言学处理例如可以包括忽略特定字符(例如标点符号),丢弃常见单词(例如无用词(stop word)),以及/或者词干提取(stemming)和词形还原(lemmatization)。语言学处理还可以包括令牌规范化,其中包括去除变音符号(diacritics)和重音符号(accents)以及/或者大写字母/大小写折叠(case-folding)等等。
在令牌化器322为文档生成了令牌集合之后,令牌化器322把令牌集合存储在令牌存储库324中。在一些实例中,例如当令牌化器322向索引器323通知最近创建的文档340或者向索引器323通知最近修改的文档340时,令牌化器322还可以向索引器323提供令牌集合。
令牌存储库324存储由令牌化器322为文档340生成的令牌集合。举例来说,对于文档340的给定版本,令牌存储库324可以存储由令牌化器322为该文档版本生成的令牌集合。
在本发明的一些实施例中,令牌存储库324包括面向列的分布式数据库系统,比如APACHE HBASE数据库系统。但是根据当前的特定实现方式的需求,在其他实施例中可以使用其他类型的数据库系统。举例来说,取代开源、面向列的或者分布式数据库系统,可以使用专有、关系型或独立数据库系统。
考虑到前面的示例性客户端-服务器多用户搜索系统320,现在将更加详细地描述用于处理查询332并且返回个性化应答334的服务系统325及其组件。
服务系统
现在参照图4,其是根据本发明的一些实施例的更加详细地示出服务系统325的组件的方块图。服务系统325包括一台或多台服务器326(在这里统称作“前端服务器326”)、一台或多台服务器410(在这里统称作“访问控制服务器410”)以及查询处理器327。
查询处理器327被分布在两层服务器上:(1)一台或多台服务器430(统称作“索引服务器430”),其负责存储文档索引328并且针对文档索引328的索引碎片(例如328A、328B、328C…328N)处理查询332;以及(2)一台或多台服务器430(统称作“路由服务器430”),其负责基于与查询332相关联的文档命名空间标识符把查询332从前端服务器326路由到适当的索引服务器430,并且把返回自索引服务器430的应答418组合到应答334中,应答334随后被返回到前端服务器326并且最终被返回到末端用户计算设备311。
文档索引328的每一个索引碎片(例如328A、328B、328C…328N)可以被存储在相应的索引服务器(例如430A、430B、430C…430N)处。索引服务器(430B)处的索引碎片(例如328B)可以对被指派到该索引碎片的一个或多个文档命名空间中的文档340进行索引。
在操作中,前端服务器326A从末端用户计算设备(例如311A)接收搜索查询332A,并且将针对所述查询的个性化应答334A返回到末端用户计算设备。应答334A可以被个性化的含义是在于,在应答334中被识别成对于查询332A是相关的文档340可以被限制到仅有属于用户被授权访问的文档命名空间的文档340。如果查询332A是完成查询,则应当334A也可以被个性化的含义是在于,包括在应答334中的针对所述完成查询的可能完成可以仅由文档索引328中的对属于用户被授权访问的文档命名空间的文档340进行索引的索引令牌构成。可以对用户进行认证以促进应答334A的个性化。
因此,在对于得到认证的用户建立的认证会话的情境中,可以在前端搜索326A处接收查询332A。举例来说,得到认证的用户可以是向前端服务器326A发送了查询332A的末端用户计算设备的用户。得到认证的用户可能在前端服务器326A接收到查询332A之前得到认证。举例来说,得到认证的用户可能响应于接收到包含认证凭证(例如用户名/口令对)的来自末端用户计算设备的认证网络请求而得到认证。响应于接收到认证网络请求,可以把网络请求中的口令与对应于给定用户名的已知口令进行比较。如果口令匹配,则建立认证会话。否则,如果口令不匹配,则不建立认证会话。
可以使用除了用户名/口令对之外的其他认证凭证对用户进行认证。举例来说,在一些实例中,可以根据多因素认证技术对用户进行认证。举例来说,除了用户所知道的事项(例如用户名/口令对)之外,可以基于用户所拥有的事项(例如FOB或移动电话)以及/或者基于用户是谁(例如生物测定测量)对用户进行认证。在一些实例中,可以根据不要求用户提供口令的认证协议对用户进行认证。适合于此目的的一些示例性认证协议包括开放授权(OAuth)、OpenId以及安全断言标记语言(SAML)认证协议。
在一些实例中,在前端服务器326A接收到查询332A之前对用户进行认证,而在其他实施例中,则响应于接收到查询332A对用户进行认证。举例来说,包含查询332A的网络请求还可以包含用于对用户进行认证的认证凭证,或者可以响应于接收到包含查询332A的网络请求通过其他方式对用户进行认证。
在用户得到认证之后,可以通过会话标识符令牌的形式为用户建立认证会话。具体来说,可以响应于成功认证了用户而创建会话标识符令牌。在创建之后,可以在网络请求和网络响应中在用户的末端用户计算设备与前端服务器326A之间发送(例如在“小甜饼(cookie)”中)会话标识符令牌,其中包括在包含查询332A的网络请求中以及在包含应答334A的网络响应中进行发送。会话标识符令牌直接或间接地(例如通过关联阵列)标识针对其成功认证了用户的用户账户(例如由用户名唯一地标识的账户)。出于额外的安全性,可以利用密码术对会话标识符令牌进行加密。
时时地(例如响应于接收到查询332A)或者在一段时间内(例如从用户得到认证的时间直到向用户的末端用户计算设备返回应答334A为止),认证会话数据411可以被存储在前端服务器326A的易失性或非易失性存储器中。认证会话数据411可以包括与得到认证的用户有关的信息,比如得到认证的用户的用户名、用户标识符或者其他用户账户标识符和相关联的特权、许可和/或授权。
服务系统325能够把针对查询332A的应答334A限制到仅标识满足查询332A并且属于得到认证的用户被授权访问的文档命名空间的索引在文档索引328中的文档340。服务系统325能够作此限制,尽管文档索引328可以索引满足查询332A但是属于得到认证的用户未被授权访问的文档命名空间的文档340。
为了限制针对查询332A的应答334A,前端服务器326A可以向访问控制服务器410A发送网络请求412,从而请求得到认证的用户被许可访问的(多个)文档命名空间的(多个)标识符。为了促进访问控制服务器410A的这一确定,网络请求412可以包含得到认证的用户的指示或标识符。举例来说,所述指示或标识符可以是用户名、会话标识符令牌、用户账户标识符或者唯一地标识用户和/或针对其成功地认证了用户的用户账户的其他信息。
响应于接收到网络请求412,访问控制服务器410A可以在用户账户数据库(图4中未示出)中查找得到认证的用户被许可访问的(多个)文档命名空间的(多个)标识符,其中把在请求412中提供的得到认证的用户的指示或标识符用作查找操作中的关键字。
前端服务器326A可以在各个不同的时间向访问控制服务器410A发送网络请求412。举例来说,前端服务器426A可以响应于接收到查询332A而发送网络请求412。作为另一个实例,前端服务器426A可以在成功认证了用户之后发送网络请求412。
响应于接收到网络请求412,访问控制服务器410A返回网络响应413,其包括得到认证的用户被许可访问的(多个)经过授权的文档命名空间的(多个)标识符。每一个经过授权的文档命名空间标识符唯一地标识得到认证的用户被许可在某一访问层级根据在文档命名空间上的显式和/或隐式访问控制对其进行访问的文档命名空间。举例来说,经过授权的文档命名空间标识符可以标识得到认证的用户对属于该文档命名空间的文档340至少具有读取访问的文档命名空间。为了高效地处理后续网络请求,前端服务器326A可以把(多个)经过授权的文档命名空间标识符存储(高速缓存)为对于得到认证的用户保持的认证会话数据411的一部分。在这种情况下,前端服务器326A可能不必响应于接收到查询332A而向访问控制服务器410A发送网络请求412。
来自用户的末端用户计算设备的包括查询332A的网络请求还可以表明用户希望搜索的(多个)文档命名空间的(多个)标识符。在这种情况下,可以计算用户希望搜索的(多个)文档命名空间的(多个)标识符的集合与用户被许可访问的(多个)经过授权的文档命名空间的(多个)标识符的集合的交集,以便确定将要搜索的(多个)经过授权的文档命名空间的(多个)标识符。这一交集可以由前端服务器326A实施。或者,这一交集可以由访问控制服务器410A实施。在这种情况下,前端服务器326A可以在网络请求412中包括用户希望搜索的(多个)文档命名空间的(多个)标识符,并且针对所述网络请求412的网络响应413可以包括由访问控制服务器410A计算的交集的结果。
如果包括查询332A的网络请求没有表明将要搜索的任何所请求的文档命名空间,则可以选择将要搜索的(多个)经过授权的文档命名空间的(多个)标识符的默认集合。根据具体情况,对于默认集合的选择可以由前端服务器326A从在响应413中返回或者作为认证会话数据411的一部分被高速缓存的(多个)经过授权的文档命名空间的(多个)标识符实施。或者,访问控制服务器410A可以从用户被许可访问的所有文档命名空间的集合选择默认集合。在任一种情况下,默认集合可以标识a)用户被许可访问的所有文档命名空间(例如与得到认证的用户的账户相关联的所有文档命名空间)或者b)其中的一个子集。
在确定了将要搜索的(多个)经过授权的文档命名空间的(多个)标识符之后,可以从前端服务器326A向路由服务器420A发送包括查询332A以及将要搜索的(多个)经过授权的文档命名空间的(多个)标识符的网络请求,以便由查询处理器327进一步处理查询332A。
响应于从前端服务器326A接收到包括查询332A以及将要搜索的(多个)经过授权的文档命名空间的(多个)标识符的网络请求,路由服务器420A处的查询处理器327确定将把查询332A路由到该处的一台或多台索引服务器430。这一确定可以基于路由服务器420A向将要搜索的(多个)经过授权的文档命名空间的(多个)标识符当中的每一个应用确定性映射函数416的结果而作出。在给定文档命名空间的标识符的情况下,确定性映射函数416和索引服务器映射417可以由路由服务器(例如420A)使用来确定存储对给定的文档命名空间中的文档进行索引的索引碎片(例如328B)的索引服务器(例如430B)。
根据本发明的一些实施例,确定性映射函数416对将要搜索的文档命名空间标识符应用单向散列函数、简单散列函数、一致散列函数等等,以便确定为之指派文档命名空间的索引碎片(例如328B)。为了作出这一确定,路由服务器420A处的查询处理器327可以具有对于索引服务器映射417的访问。确定性映射函数416和索引服务器映射417一起提供一种使得路由服务器420A处的查询处理器327确定在该处存储包含对应于给定的文档命名空间的索引的索引碎片(例如328B)的索引服务器(例如430B)的主机名或网络地址的方式。
在本发明的一些实施例中,确定性映射函数416可以包括散列机制和取模机制。散列机制可以接受文档命名空间标识符作为输入(例如表示文档命名空间标识符的字符串数据),并且可以产生散列数值hv作为输出。举例来说,散列机制可以包括MD4、MD5、SHA-1或SHA2消息-摘要算法,其在被应用于作为输入提供的文档命名空间标识符时,产生散列数值(例如32比特散列数值)以作为输出。取模机制可以计算散列数值hv除以模数k的余数r,从而把输入文档命名空间标识符映射到0到k-1范围内的k个数值当中的一个。模数k的数值可以基于多种不同的因素来选择,其中例如包括实际、预期或期望的索引服务器430的数目,由文档索引328索引的实际、预期或期望的文档命名空间的数目,以及/或者实际、预期或期望的文档命名空间的群组的数目。在一个示例性实施例中,数值k是2的幂并且至少等于1024。
在本发明的一些实施例中,索引服务器映射417包括对应于每一台索引服务器430的条目。每一个这样的条目通过范围0到k-1内的一个或多个无重叠子范围被检索。举例来说,映射417中的第一条目E1可以具有包括定义范围0到k-1中的第一连续数值范围的数值K1和K2的关键字,映射417中的第二条目E2可以具有包括定义范围0到k-1中的第二连续数值范围的数值K3和K4的关键字,其中第一范围K1到K2不与第二范围K3到K4重叠。
当路由服务器420A处的查询处理器327对给定的文档命名空间标识符应用确定性映射函数416时,可以产生处于范围0到k-1内的数值r。路由服务器420A处的查询处理器327随后可以利用数值r咨询索引服务器映射417,以便识别出r处于其条目关键字的范围内的条目。该条目的主机名或网络地址可以标识在该处存储对属于给定的文档命名空间的文档340进行索引的索引碎片(例如328B)的索引服务器(例如430B)。
在本发明的一些实施例中,被指派到一个索引碎片(例如328B)的文档命名空间被分组到该索引碎片的更少数目的文档命名空间群组中,以便减少在该索引碎片被存储于该处的索引服务器(例如430B)处所存储的索引文件的数目。换句话说,在一个索引碎片(例如328B)内,被指派到该索引碎片的文档命名空间可以被划分到各个文档命名空间群组中。每一个这样的文档命名空间群组可以包括多个文档命名空间。
举例来说,被指派到一个索引碎片(例如328B)的两百万(2,000,000)个文档命名空间当中的每一个可以被划分到该索引碎片的八十(80)个文档命名空间群组当中的一个群组中。出于效率原因,索引碎片(例如328B)被存储在该处的索引服务器(例如430B)可以存储对应于八十(80)个文档命名空间群组当中的每一个群组的一个或多个索引文件,而不是存储对应于两百万(2,000,000)个文档命名空间当中的每一个文档命名空间的一个或多个索引文件。在这种情况下,当被应用于给定的文档命名空间标识符时,由散列机制输出的散列数值hv可以被用作该给定的文档命名空间所属的文档命名空间群组的标识符。
在一些实施例中,文档命名空间群组不被用来进一步划分索引碎片(例如328B)。在这些实施例中,散列数值hv除以模数k的余数r可以被用作为之指派给定的文档命名空间的索引碎片的标识符。此外,在这些实施例中,在该处存储索引碎片的索引服务器可以存储对应于被指派到该索引碎片的所有文档命名空间的一个或多个索引文件。举例来说,索引服务器可以存储对应于被指派到索引碎片的所有文档命名空间的单个索引文件。
虽然在图4中索引服务器映射417被显示成与确定性映射函数416和路由服务器420A处的查询处理器327分开,但是索引服务器映射417可以是确定性映射函数416的一个组件或者是路由服务器420A处的查询处理器327的一个组件。此外,每一台路由服务器420可以具有对于索引服务器映射417的访问。在这种情况下,可以在每一台路由服务器420处存储(高速缓存)索引服务器映射417的一个拷贝以用于高效访问。附加地或替换地,可以使得索引服务器映射417作为网络服务可用于路由服务器420。服务系统325可以包括按照水平方式扩展的多台路由服务器420,以用于负荷平衡、增加容量、增加吞吐量、减少等待时间、故障控制转移和/或冗余性目的。
在一个示例性实施例中,文档索引328对超过四亿(400,000,000)个文档命名空间中的文档340进行索引,并且确定性映射函数416和索引服务器映射417把超过4亿个文档命名空间当中的每一个指派(映射)到近似两百(200)个索引碎片(例如328A、328B、328C…328N)当中的一个。在该示例性实施例中,每一个索引碎片(例如328A)对近似两百万(2,000,000)个文档命名空间中的文档340进行索引。
在一些实例中,索引服务器(例如430C)实际包括按照水平方式分布的多台服务器,以便为索引碎片(例如328C)提供负荷平衡、故障控制转移或冗余性。在这种情况下,所述多台索引服务器当中的每一台可以存储索引碎片(例如328C)的一个复制品或拷贝。
在一些实例中,索引服务器(例如430A)包括多台服务器,其中所述多台服务器当中的每一台存储索引碎片(例如328A)的一部分。在这种情况下,可以有多个层级的路由服务器。第一路由层级通过路由服务器420A例示,其把接收自前端服务器326A的查询332A路由到其中一台或多台索引服务器430。可以存在第二层级的路由服务器,以便在一台索引服务器(例如430C)内将查询进一步路由到该索引服务器的多台服务器当中的一台或多台。在这种情况下,第二层级路由服务器也可以具有类似于确定性映射函数416的确定性映射函数和映射以及索引服务器映射417,以便基于文档命名空间的标识符进一步对查询进行路由。
在图4的实例中,查询332A由路由服务器420A根据确定性映射函数416和索引服务器映射417路由到索引服务器430B和430C。但是取决于将利用查询332A搜索的经过授权的文档命名空间的数目,查询332A可能同样容易地被路由到仅仅单台索引服务器430或者被路由到多于两台索引服务器430。举例来说,如果将要搜索仅仅一个经过授权的文档命名空间,或者如果将要搜索的所有经过授权的文档命名空间都被指派到相同的索引碎片(例如328B),则查询332A可能被路由服务器420A路由到仅仅一台索引服务器(例如430B)。
当把查询332A路由到索引服务器(例如430B)时,路由服务器420A可以向索引服务器发送包括查询332A的网络请求。此外,网络请求可以包括被指派到存储在该索引服务器处的索引碎片(例如328B)的将要搜索的(多个)经过授权的文档命名空间的(多个)标识符。此外,每一个这样的经过授权的文档命名空间标识符可以在网络请求中与该文档命名空间所属的文档命名空间群组的标识符相关联。
在本发明的一些实施例中,索引服务器(例如430B)处的查询处理器327使用接收自路由服务器420A的网络请求中的文档命名空间群组的标识符来限制在确定针对查询332A的应答(例如418A)时所访问的索引碎片(例如328B)的部分。举例来说,基于网络请求中的文档命名空间群组标识符,索引服务器处的查询处理器327可以仅访问存储在索引服务器处的非易失性存储器中的(多个)特定索引数据库文件351,或者仅访问存储在索引服务器的易失性存储器中的特定数据结构。
作为一个实例,假设从前端服务器326A发送到路由服务器420A的包括查询332A的网络请求规定将利用相应的文档命名空间标识符“abcd”和“defg”搜索两个经过授权的文档命名空间。还假设根据确定性映射函数416和索引服务器映射417,经过授权的文档命名空间“abcd”属于文档命名空间群组“1234”并且被指派到索引碎片328B,并且经过授权的文档命名空间“defg”属于文档命名空间群组“5678”并且被指派到索引碎片328C。在这种情况下,从路由服务器420A到索引服务器430B的网络请求可以规定将要搜索文档命名空间群组“1234”中的文档命名空间“abcd”,并且从路由服务器420A到索引服务器430C的网络请求可以规定将要搜索文档命名空间群组“5678”中的文档命名空间“defg”。索引服务器430B可以使用发送到索引服务器430B的网络请求中的文档命名空间群组标识符“1234”来限制在制定针对查询332A的应答418A时由索引服务器430B处的查询处理器327访问的索引碎片328B的部分。类似地,索引服务器430C可以使用发送到索引服务器430C的网络请求中的文档命名空间群组标识符“5678”来限制在制定针对查询332A的应答418B时由索引服务器430C处的查询处理器327访问的索引碎片328C的部分。这样的限制例如可以包括仅访问存储在索引服务器的非易失性存储器中的(多个)索引数据库文件351,以及/或者与指定的文档命名空间群组标识符相关联的索引服务器的易失性存储器中的数据。
路由服务器420A可以把查询332A路由到多台索引服务器(例如430B、430C),从而使得每一台索引服务器430处的查询处理器327可以并行地处理查询。举例来说,路由服务器420A可以向索引服务器430B发送包括查询332A的网络请求,与此同时或者大致同时,路由服务器420A可以向索引服务器430C发送包括查询332A的网络请求。在这种情况下,索引服务器430B处的查询处理器327可以针对索引碎片328B处理查询332A,与此同时或者大致同时,索引服务器430C处的查询处理器327可以针对索引碎片328C处理查询332A。
当在索引服务器(例如430B)处接收到查询332A时,索引服务器处的查询处理器327可以咨询(访问)存储在索引服务器处的索引碎片(例如328B),以便确定满足查询的文档340。通过这样做,索引服务器处的查询处理器327可以把在针对查询的应答(例如418A)中可能标识出的文档340限制到仅有属于将要搜索的经过授权的文档命名空间的文档340。为了作出这一限制,索引服务器处的查询处理器327可以使用来自路由服务器420A的网络请求中的伴随查询332A的(多个)经过授权的文档命名空间标识符。此外,可以把在索引碎片中索引的文档340的文档标识符与被索引的文档340所属的文档命名空间的文档命名空间标识符相关联。这些关联便于查询处理器327把可以在针对查询的应答中标识出的文档340限制到1)满足查询332A并且2)与作为将要搜索的其中一个经过授权的文档命名空间标识符的文档命名空间标识符相关联的那些文档。即使被索引的文档340将在其他方面满足查询,如果文档340不属于将要搜索的其中一个经过授权的文档命名空间,则索引服务器处的查询处理器327也可以不在针对查询332的应答418A中标识出文档340。
从索引服务器(例如430B)返回到路由服务器(例如420A)的应答(例如418A)可以标识出满足查询332A的其中一个或多个经过授权的文档命名空间中的一个或多个文档340。可以根据由索引服务器处的查询处理器327采用的排序函数对文档进行排序。所述排序函数可以是基于针对被索引文档计算的取决于查询的量度和/或独立于查询的量度。
来自索引服务器(例如430B)的针对查询332A的应答(例如418A)可以包括由排序函数生成的对应于每一个标识出的文档的排序分数。查询处理器327可以在所有的索引服务器(例如430A、430B、430C…430N)处采用相同的排序函数,从而使得在不同索引服务器处对于相同的查询生成的排序分数是可比较的。在所有索引服务器处使用相同的排序函数还允许路由服务器420A处的查询处理器327把在从索引服务器430B和430C返回的针对查询332A的多个应答418A和418B中标识出的文档340组合到单个应答334A中,其被返回到前端服务器326A,并且最终被返回到由前端服务器326A从该处接收到查询332A的末端用户计算设备311A。
根据本发明的一些实施例,前端服务器326A可以对所获得的搜索查询332A应用传统的拼写校正算法和/或传统的语音校正算法(例如soundex算法)。拼写校正算法可以应用不同形式的拼写校正。举例来说,拼写校正算法可以应用传统的隔离词项(isolated-term)的校正算法(例如编辑距离和/或k元语法(k-gram)重叠)和/或传统的上下文敏感的校正算法。相应地,被转发到路由服务器420A并且被路由到索引服务器430的查询332A可以反映出由前端服务器326A在查询332A的令牌上实施的拼写校正和/或语音校正的结果。
索引碎片
现在参照图5,其是根据本发明的一些实施例的文档索引328的索引碎片(例如328B)的方块图。根据本发明的一些实施例,索引碎片可以被结构化成包括字典510和相应的记录520的倒排索引(inverted index)。
字典510可以包括借以索引在记录520中标识出的文档340的索引令牌(例如令牌1、令牌2、令牌3…令牌N)。字典510还包括对应于每一个索引令牌(例如令牌1)的指针,所述指针指向标识出该索引令牌索引(例如出现在其中)哪些文档340的一个或多个文档标识符(例如DOC ID 1)的记录列表(例如记录列表2)。
字典510还可以包括除了索引令牌之外的其他信息,例如令牌属性信息,比如令牌频率信息或者可以由查询处理器327的排序函数使用来按照取决于查询和/或独立于查询的方式对文档进行排序或者通过其他方式确定文档对于查询的相关性的其他信息。
记录520的记录列表(例如记录列表2)可以包括除了文档标识符之外的其他信息,例如文档-令牌属性信息,比如特定文档340内的令牌的令牌频率、特定文档340内的令牌的一处或多处位置或者可以由查询处理器327的排序函数使用来按照取决于查询和/或独立于查询的方式对文档340进行排序或者通过其他方式确定文档340对于查询的相关性的其他信息。
记录520中的文档标识符(例如DOC ID 1、DOC ID 2、DOC ID 3…DOC ID N)可以与文档命名空间标识符相关联,以表明所标识出的文档340所属的文档命名空间。这一管理还允许索引服务器(例如430B)处的查询处理器327把针对查询(例如332)的应答(例如417A)限制到仅标识出属于将要搜索的经过授权的文档命名空间的文档340。
举例来说,记录列表(例如记录列表2)中的单元可以前缀有文档命名空间标识符,其标识出文档340所属的文档命名空间。举例来说,记录列表(例如记录列表2)中的单元可以是具有<文档命名空间标识符>:<文档标识符>格式的字符串数据,其中<文档命名空间标识符>是标识文档命名空间的字符串数据字段,并且<文档标识符>是标识属于该文档命名空间的文档340的字符串数据字段。冒号“:”字符可以被用作用以分开记录列表单元内的各个字符串数据字段的分隔符字符。其他分隔符字符也是可能的。例如在字符串数据字段具有固定长度的情况下,也有可能不使用分隔符字符。用于文档标识符的其他格式也是可能的,并且本发明不受限于任何特定的前缀格式。
取代利用文档命名空间标识符为记录列表中的文档标识符加前缀以便把文档340与其所属的文档命名空间相关联,索引碎片可以包括多对一映射,其把给定的文档标识符映射到文档340所属的文档命名空间的标识符。所述映射是多对一的,这是因为一个文档命名空间可以包含多个文档340。
在本发明的一些实施例中,出于空间效率的原因并且为了减小记录520的尺寸,记录列表(例如记录列表2)中的文档命名空间标识符或文档标识符包括处于索引碎片(例如索引碎片328B)本地的本地标识符,并且替代(例如在字节数方面)尺寸较大的全局文档命名空间标识符或全局文档标识符。本地标识符(例如在字节数方面)的尺寸可以小于该本地标识符所替代的全局文档命名空间标识符或全局文档标识符。
索引碎片(例如328B)可以包括把给定的本地标识符映射到全局文档标识符的一对一映射。或者,可以存在两个一对一映射,其中一个映射用于把本地文档命名空间标识符变换到全局文档命名空间标识符,另一个映射用于把本地文档标识符变换到全局文档标识符。作为另一种替换方案,可以存在用于把给定的本地文档命名空间标识符变换到全局文档标识符以及文档340所属的文档命名空间的全局文档命名空间标识符的一对一映射。
在本说明书中,除非在上下文中能够明显看出另有所指,否则文档340的“文档标识符”指的是直接或间接地(例如通过关联阵列)唯一标识文档340的所有可能形式的文档标识符,包括文档340的本地文档标识符和文档340的全局文档标识符。
类似地,在本说明书中,除非在上下文中能够明显看出另有所指,否则文档命名空间的“文档命名空间标识符”指的是直接或间接地(例如通过关联阵列)唯一标识文档命名空间的所有可能形式的文档命名空间标识符,包括文档命名空间的本地文档命名空间标识符和文档命名空间的全局文档命名空间标识符。
根据本发明的一些实施例,当在索引服务器(例如430B)处接收到查询(例如332)时,索引服务器处的查询处理器327使用查询中的查询令牌作为进入到字典510中的关键字,以便识别相应的记录520中的记录列表。如果在查询中存在多个查询令牌,则根据各个查询令牌如何作为布尔表达式被关联在一起,可以适当地合并相应的记录列表。
在本发明的一些实施例中,索引服务器处的查询处理器327把可以被包括在针对查询的应答(例如417A)中的相应记录列表中所标识出的文档340限制到仅有属于将要搜索的经过授权的文档命名空间的那些文档340。在本发明的一些实施例中,这是通过由索引服务器处的查询处理器327把相应记录列表中的文档标识符的相关联的文档命名空间标识符与查询的相关联的经过授权的文档命名空间标识符(其例如被包括在来自路由服务器(例如420A)的包括所述查询的网络请求中)进行比较而实现的。如果与在其他方面满足查询的文档340的文档标识符相关联的文档命名空间标识符匹配与查询相关联的经过授权的文档命名空间标识符,则文档340可以被包括在针对查询的应答中。但是,如果与文档标识符相关联的文档命名空间标识符不匹配与查询相关联的经过授权的文档命名空间标识符,则即使文档340在其他方面满足查询,该文档也不被包括在针对查询的应答中。通过这种方式,索引服务器430处的查询处理器327可以把针对查询的应答限制到仅有属于与将要搜索的查询相关联的经过授权的文档命名空间的文档340。
在本发明的一些实施例中,一个索引碎片存储多个字典510/记录520对。举例来说,一个索引碎片可以对于被指派到该索引碎片的多个文档命名空间当中的每一个或者对于被指派到该索引碎片的多个文档命名空间群组当中的每一个存储字典510和相应的记录520。
在本发明的一些实施例中,索引碎片(例如328B)可以根据被指派到该索引碎片的文档命名空间群组的标识符而被组织到索引数据库文件351和易失性存储器数据结构的分别可标识的集合中。在这种情况下,对于被指派到索引碎片的每一个文档命名空间群组可以存在一个单独的字典510或多个单独的字典510和相应的记录520。当在索引服务器(例如430B)处接收到查询(例如332)时,索引服务器处的查询处理器327可以使用与来自路由服务器的网络请求中的经过授权的文档命名空间标识符相关联的文档命名空间群组标识符来确定简要访问哪一个字典510或哪些字典510和相应的记录520。
在本发明的一些实施例中,索引碎片(例如328B)可以根据被指派到该索引碎片的文档命名空间的标识符而被组织到索引数据库文件和易失性存储器数据结构的分别可标识的集合中。在这种情况下,对于被指派到索引碎片的每一个文档命名空间可以存在一个单独的字典510或多个单独的字典510和相应的记录520。当在索引服务器(例如430B)处接收到查询(例如332)时,索引服务器处的查询处理器327可以使用与来自路由服务器的网络请求中的文档命名空间标识符来确定简要访问哪一个字典510或哪些字典510和相应的记录520。
在本发明的一些实施例中,索引碎片存储单独的字典510/记录520对以用于处理不同类型的查询。举例来说,对于被关联到一个索引碎片的给定的文档命名空间或给定的文档命名空间群组,该索引碎片可以存储用于处理未完成查询的第一字典510/记录520对以及用于处理完成查询的第二字典510/记录520对。通过存储单独的字典510/记录520对允许针对处理特定类型的查询而调整字典510和相应的记录520的结构和内容。举例来说,用于处理完成查询的字典510可以仅包括对应于文档的文件名的索引令牌而不是对应于文档的全文的索引令牌,以便减小以存储在非易失性存储器(例如闪存)上或易失性存储器(例如RAM)时所消耗的字节计的字典尺寸,并且从而允许查询处理器327更加快速地处理完成查询。
索引服务器(例如430C)处的查询处理器327可以把字典510(或者其一部分)从非易失性存储装置(例如闪存)加载到易失性存储器(例如RAM)中,以用于更加高效的访问。记录列表(例如记录列表2)可以被存储在索引服务器(例如430C)的非易失性存储器(例如闪存)中,并且/或者被高速缓存在索引服务器的易失性存储器(例如RAM)中,以用于更加高效的访问。根据高速缓存逐出策略,例如近期最少访问策略,可以从索引服务器的易失性存储器逐出高速缓存的记录列表。索引服务器(例如430B)处的查询处理器327还可以在易失性存储器中高速缓存作为在从记录520取回的多个记录列表上实施的合并算法的结果而生成的记录列表。通过这样做,索引服务器处的查询处理器327可以避免必须在后来的某一时间在多个记录列表上实施合并算法。
继续参照图5,根据本发明的一些实施例,为了促进完成查询的处理,可以通过文档命名空间标识符为字典510中的索引令牌加前缀,并且可以按照带前缀索引令牌的词典学顺序在字典内对带前缀索引令牌进行排序。通过这种方式配置的字典510在这里被称作“完成”字典。
在本发明的一些实施例中,与带前缀索引令牌相关联的记录列表可以包括属于在所述带前缀索引令牌中标识出的文档命名空间的文档340的文档标识符。因此,如果完成字典包括对应于多于一个文档命名空间的带前缀索引令牌,则一个索引令牌可以在完成字典成出现多于一次,其中对于多个文档命名空间当中的每一个出现一次。
举例来说,完成字典中的带前缀索引令牌可以具有<文档命名空间标识符>:<索引令牌>的形式,其中<文档命名空间标识符>是标识文档命名空间的字符串数据字段,并且<索引令牌>是包括索引令牌的字符的字符串数据字段。冒号“:”字符或其他字符可以被用作用以分开带前缀索引令牌内的各个字符串数据字段的分隔符字符。带前缀索引令牌的一个实例是[abcd:private](没有封闭括号),其中“abcd”是文档命名空间的标识符,并且“private”是索引令牌。
通过根据带前缀索引令牌的词典学排序对完成字典内的各个带前缀索引令牌进行排序,索引服务器(例如430B)处的查询处理器327可以更加高效地识别针对完成查询的完成令牌的可能完成。具体来说,作为带前缀索引令牌的词典学排序的结果,当完成字典被存储在非易失性存储器或易失性存储器中时,属于相同的文档命名空间并且共享与完成令牌相匹配的前缀的完成字典中的索引令牌可以被存储(例如群集)在彼此附近(例如在连续或邻接的存储器位置处)。这样的群集在查询处理器访问完成字典以确定针对完成令牌的可能完成时促进顺序存储器访问,并且还在访问完成字典时减少或消除了随机存储器访问。
举例来说,对应于文档命名空间“abcd”的索引令牌“concession”、“conclude”、“conclusion”、“concrete”和“concurrent”可以分别作为带前缀索引令牌“abcd:concession”、“abcd:conclude”、“abcd:conclusion”、“abcd:concrete”和“abcd:concurrent”在存储器中被存储在彼此附近。在处理例如具有完成令牌“con”并且例如具有标识符“abcd”的特定文档命名空间是将为之搜索的经过授权的文档命名空间的完成查询时,查询处理器可以生成索引关键字“abcd:con”以用于访问完成字典。由于带前缀索引令牌作为词典学排序的结果在存储器中被存储在彼此附近,因此与带前缀索引令牌没有在存储器中被存储在彼此附近的情况相比,查询处理器可以更加高效地把索引令牌“concession”、“conclude”、“conclusion”、“concrete”和“concurrent”识别成对应于文档命名空间“abcd”中的完成令牌“con”的可能完成。
除了作为带前缀索引令牌的词典学排序的结果在存储器中被存储在彼此附近的完成字典的带前缀索引令牌之外,作为带前缀索引令牌的词典学排序的结果,与经过排序的带前缀索引令牌相关联的完成字典的指向相应记录列表的存储位置的指针(例如地址)也可以在存储器中被存储在彼此附近。具体来说,指向对应于带前缀索引令牌的记录列表的存储位置的指针可以在存储器中被存储在该带前缀索引令牌的附近。举例来说,所述指针和带前缀索引令牌可以被存储在相同的存储器块中,或者被存储在连续或邻接存储器块的相同集合中。因此,查询处理器不仅可以更加高效地把索引令牌“concession”、“conclude”、“conclusion”、“concrete”和“concurrent”识别成对应于完成令牌“con”的文档命名空间“abcd”中的可能完成,而且作为词典学排序的结果,查询处理器还可以更加高效地识别出对应于这些索引令牌的记录列表的存储位置。
在本发明的一些实施例中,按照带前缀索引令牌的词典学顺序对完成字典的带前缀索引令牌进行排序包括对完成字典的多条记录(数据结构)进行排序,其中每一条这样的记录包括一个带前缀索引令牌和相关联的指针(例如地址),其指向对应于该带前缀索引令牌的记录列表被存储在该处的易失性或非易失性存储器位置。可以根据其带前缀索引令牌的词典学顺序对所述多条记录进行排序。随后可以把经过排序的记录存储在计算机存储器(例如易失性存储器或非易失性存储器)的连续或邻接块中。
令牌存储库
正如前面所提到的那样,多用户搜索系统320的建立系统321可以包括令牌存储库324和索引器323。
图6示出了根据本发明的一些实施例的用于令牌存储库324的可能模式。根据所述模式,令牌存储库324包括两个表:“文档”表610和“索引器-文档”表620。
文档表610存储对应于由建立系统321的令牌化器322处理的文档340的各个版本的令牌和元数据的集合。在一个特定实施例中,文档表610在给定的时间可以仅对于文档340的一定数目的r个最近版本存储信息,其中r可以基于各种因素来选择,其中例如包括文档表610的所期望的最大尺寸或者根据当前的特定实现方式的需求的其他因素。根据一些实施例,建立系统321的索引器323使用文档表610中的信息生成索引数据库文件351,正如后面更加详细地描述的那样。
索引器-文档表620存储对应于由索引器323处理的文档340的当前版本的令牌和元数据的集合。在一些实施例中,文档的当前版本是已由索引器323处理的该文档的最新(最近)版本。根据一些实施例,索引器323使用文档表610和索引器-文档表620中的信息生成索引变种352,正如后面更加详细地描述的那样。
文档表610包括若干行。文档表610中的一行可以由行关键字(例如611)键控。在一些实施例中,行关键字(例如611)是一个字节数组,其包括文档命名空间群组标识符、文档标识符以及文档版本标识符。文档标识符标识文档。文档版本标识符标识文档的特定版本。因此,文档表610中的一行可以对应于一个文档版本。文档命名空间群组标识符标识包括文档所属的文档命名空间在内的一个或多个文档命名空间的群组(总集)。冒号字符(“:”)或者其他字符或字符序列可以被使用在所述字节数组中,以便把文档命名空间群组标识符、文档标识符和文档版本标识符彼此分开。
文档表610包括“令牌”列族。对于文档表610中的每一行,令牌列族存储由令牌化器322从相应的文档版本产生的令牌(例如612)的列表。虽然没有在图6中示出,但是令牌列族还可以存储令牌的各种文档版本-令牌属性。这样的文档版本-令牌属性例如可以包括相应的文档版本中的令牌频率和/或令牌位置。
根据本发明的一些实施例,可以被存储在文档表610中的对应于相应文档版本的一个令牌的一些文档版本-令牌属性包括以下各项或者其子集或超集:
-表明该令牌是否是所述文档版本的文件名的一部分的数据;
-表明该令牌是否是所述文档版本的文件名扩展的一部分的数据;
-表明该令牌是否是所述文档版本的文件路径的一部分的数据;
-表明该令牌是否是所述文档版本的标题的一部分的数据;以及/或者
-表明该令牌在所述文档版本中是否是黑体字或者通过其他方式被突出显示的数据。
在一些实施例中,对于文档表610中的一行,令牌列族存储令牌(例如612)的列表以及文档版本-令牌属性的列表。令牌列表可以与文档版本-令牌属性列表具有相同的长度。文档版本-令牌属性列表中的位置i处的单元包括对应于令牌列表中的位置i处的令牌的文档版本-令牌属性。或者,可以存储单个列表而不是两个列表。所述单个列表中的每一个单元是一个元组,其包括一个令牌和该令牌的文档版本-令牌属性。
文档表610还包括“元数据”列族。对于文档表610中的每一行,元数据列族存储相应文档版本的命名文档版本属性(例如613)的集合。举例来说,在文档表610中,名为“修订(revision)”的其中项文档版本属性是相应文档版本的文档版本标识符。其他文档版本属性也是可能的。
根据本发明的一些实施例,可以被存储在文档表610中的对应于相应文档版本的一些文档版本属性除了所述文档版本的“修订”之外还包括以下文档-版本属性或者其子集或超集:
-所述文档版本的尺寸(例如以字节计);
-所述文档版本的最近一次修改日期/时间;
-所述文档版本是否已被从云端数据存储服务中删除;
-所述文档版本的所有可用文本内容是否已被完全令牌化;
-表明由云端数据存储服务获得所述文档版本的日期/时间的时间标记;
-从所述文档版本中提取出的令牌的数目;
-所述文档版本的文本概要;
-所述文档版本的文本摘要;以及/或者
-来自所述文档版本的文本片段。
索引器-文档表620的模式可以类似于文档表610。但是在一些实施例中,索引器-文档表620中的一行的行关键字(例如621)包括文档命名空间群组标识符和文档标识符而没有文档版本标识符。在这些实施例中,索引器-文档表620中的每一行可以对应于由索引器323处理的文档的最新(最近)版本,正如后面更加详细地描述的那样。
在图6的实例中,提供了示例性行关键字611和621。出于提供清楚实例的目的,示例性行关键字611和621包括文档命名空间群组标识符“abcd”和文档标识符“d2”。但是在一些实施例中,文档命名空间群组标识符是唯一地标识文档命名空间群组的64比特固定长度数值,并且文档标识符是唯一地标识文档的64比特固定长度数值。在一些实施例中,文档版本标识符唯一地标识文档的版本,并且提供所述版本关于文档的其他版本的排序。举例来说,对应于文档的三个版本的文档版本标识符可以分别是数值“1”、“2”和“3”。
正如前面所提到的那样,索引器323既可以通过生成文档索引328的索引数据库文件351来构造文档索引328,也可以在文档340被创建、修改或删除时生成针对文档索引328的索引变种352。
根据一些实施例,索引器323构造包括多个分段(碎片)的分布式文档命名空间划分索引。每一个碎片被存储在服务系统325的相应的索引服务器上。文档命名空间被指派到相应的索引碎片。相应的索引碎片对属于该文档命名空间的文档进行索引。多个文档命名空间可以被指派到相同的索引碎片。
在一些实施例中,一个文档命名空间属于包括各个文档命名空间的一个文档命名空间群组。在这些实施例中,文档命名空间群组(包括该文档命名空间群组中的所有文档命名空间)被指派到相应的索引碎片。相应的索引碎片对属于该文档命名空间群组中的文档命名空间的文档进行索引。多个文档命名空间群组可以被指派到相同的索引碎片。
根据一些实施例,索引器323被设计成能够对于大型文档总集(例如数以十亿计的文档)构造文档索引328。在一个示例性实施例中,文档索引328对超过四亿(400,000,000)个文档命名空间中的文档进行索引,所述超过四亿(400,000,000)个文档命名空间属于被指派到文档索引328的近似两百(200)个索引碎片当中的一个索引碎片的超过一万六千(16,000)个文档命名空间群组。
在一些实施例中,索引器323应用针对分布式计算的MapReduce一般架构以便从令牌存储库324中的信息构造文档命名空间划分索引。关于MapReduce的更多信息可以在J.Dean和S.Ghemawat的文章“MapReduce:Simplified Data Processing on LargeClusters(MapReduce:大型集群上的简化数据处理)”(Google,Inc.,2004年)中找到。
MapReduce是针对从广为可用的硬件组件(例如处理器、存储器、盘)建立的商品服务器计算机的计算机集群而设计的。所述集群通常包括引导为各个单独的工作节点指派任务的处理的主导节点。
成批索引器(BULK INDEXER)
根据一些实施例,由索引器323实施各个MapReduce阶段720,以便构造如图7中所示的文档索引328。输入数据包括来自文档表610的各行的总集。该输入总集被划分到一定数目的K个行群组(例如710A、710B、710C…710N)中。数目K可以基于多种因素来选择。举例来说,K可以被选择成确保主控节点可以在各个工作节点之间均匀地并且高效地分配MapReduce任务。在一些实施例中,K等于将为之构造索引730的文档命名空间群组的数目。
在一些实施例中,一个行群组(例如710B)包括来自对应于属于指定文档命名空间群组的所有文档的最近版本的文档表610的各行。文档的最近版本可以在文档表610中通过对应于文档的最近版本的行的“元数据”列族中的“修订”列的数值来标识。举例来说,最近版本在对应于文档命名空间群组中的文档的所有行当中可以具有对应于“修订”列的最高数值。
在一些实施例中,MapReduce阶段720的输出包括K个文档命名空间群组索引730,其中K等于将为之构造索引730的文档命名空间群组的数目。在一些实施例中,文档命名空间群组索引(例如731A)可以包括“全文”索引数据库文件351。全文索引数据库文件351可以存储通过相应的关键字排序的条目序列。在一些实施例中,每一个关键字包括一个索引项目,并且对应于该关键字的条目包括一个记录列表。所述记录列表可以包括所述索引项目出现在其中的文档命名空间群组中的文档的文档标识符的列表,并且可能还有各种其他信息,比如对应于在记录列表中标识出的文档的文档-项目属性。
在一些实施例中,为了减小全文索引数据库文件351的尺寸,全文索引数据库文件351的记录列表存储局部范围文档标识符而不是实际文档标识符。局部范围文档标识符在局部范围内唯一地标识文档。局部范围例如可以对应于一个文档命名空间群组或者一个索引碎片。与此相对,实际文档标识符可以在更大的范围内唯一地标识文档。所述更大的范围例如可以对应于所有文档命名空间群组或者所有索引碎片。由于范围被减小,因此文档的局部范围文档标识符与文档的实际文档标识符相比可以只需要更少的字节来存储,从而减小了全文索引数据库文件351的尺寸。文档命名空间群组索引(例如731A)可以包括用于把局部范围文档标识符变换到实际文档标识符的关键字-数值映射。
在一些实施例中,全文索引数据库文件351的记录列表中的文档的文档标识符与该文档所属的文档命名空间的文档命名空间标识符相关联。在一些实施例中,文档命名空间标识符是记录列表中的文档标识符的前缀,比如<文档命名空间标识符>:<文档标识符>,其中<文档命名空间标识符>是文档命名空间的局部范围或更大范围标识符,冒号(“:”)被用来把文档命名空间标识符前缀与文档标识符分开,并且<文档标识符>是文档的局部范围或更大范围标识符。文档命名空间群组索引(例如731A)可以包括用于把局部范围文档命名空间标识符变换到实际文档命名空间标识符的关键字-数值映射。
在一些实施例中,取代用文档命名空间标识符为文档标识符加前缀,全文索引数据库文件351的记录列表中的文档的文档标识符与关键字-数值映射中的文档命名空间标识符相关联。举例来说,文档命名空间群组索引(例如731A)可以包括用于把文档的给定文档标识符变换到该给定文档所属的文档命名空间的文档命名空间标识符的关键字-数值对。
在一些实施例中,文档命名空间群组索引(例如731A)可以包括“完成”索引数据库文件351。完成索引数据库文件351可以类似于全文索引数据库文件351。但是完成索引数据库文件351中的索引项目可以前缀有包括该索引项目出现在其中的文档的文档命名空间的文档命名空间标识符。通过这样做,针对完成索引数据库文件351中的条目的完成搜索查询中的关键字的索引搜索空间可以被限制到文档命名空间。
在一些实施例中,MapReduce阶段720存储把索引730(包括其索引数据库文件351)存储在分布式文件系统中,并且可用于由服务系统325的索引服务器取回(下载)。
本发明的实施例不假设文档340是静态的。相反,本发明的实施例认识到可能时时会修改现有文档340、创建新文档340以及/或者删除现有文档340。这样的事件可能意味着对应于现有索引项目的文档索引328中的记录需要被更新,并且/或者需要把具有相应记录的新的索引项目添加到文档索引328。换句话说,当文档340被改变时(也就是添加新文档或者修改或删除现有文档),可能需要更新文档索引328。
在一些实施例中,通过根据前面对于属于文档命名空间群组中的文档命名空间的所有文档所描述的成批索引技术周期性地重建整个文档命名空间群组,文档命名空间群组索引(例如731A)被更新。举例来说,可以每天一次或者按照某一其他规则的间隔完全重建文档命名空间群组索引(例如731A)。如果在重建之间对于由文档命名空间群组所涵盖的文档的改变数目较少,并且如果在使得改变可搜索方面的长达重建间隔的长度的时间延迟是可接受的,则周期性重建解决方案可以是可接受的。但是在许多情况下将希望在作出改变之后不久就使得对于文档340的改变是可搜索的。举例来说,用户将希望在由用户改变文档340之后的几分钟之内就能够搜索新的经过修改的文档340,而不是等待长达一天或更长时间来搜索所述改变。
在一些实施例中,使得对于文档340的改变快速可搜索涉及由服务系统325的索引服务器对于每个文档命名空间群组索引(例如731A)保持两个索引。所述两个索引当中的一个是文档命名空间群组索引的主索引,并且在这里被称作文档命名空间群组索引的“基础索引”,并且所述两个索引当中的另一个仅存储对于当前基础索引的改变,并且在这里被称作文档命名空间群组索引的“增量索引”。在一些实施例中,索引服务器基于接收自索引器323的索引变种352更新增量索引。
在一些实施例中,基础索引被视为是不可改变的,这是在于其不会由索引服务器利用索引变种352直接更新。相反,仅有增量索引被利用索引变种352更新。增量索引可以被存储到索引服务器的存储器(RAM)中,其中与被存储在盘上或其他非易失性存储设备上相比,增量索引可以更加高效地利用索引变种352被更新。当在索引服务器处接收到查询时,索引服务器处的查询处理器326可以针对增量索引和基础索引全部二者运行所述查询,并且合并结果。
在一些实施例中,为了避免增量索引随着来自索引变种352的更新变得过大,周期性地丢弃增量索引和基础索引,并且利用根据前面描述的成批索引技术生成的新的最新状态基础索引对其进行替换。随后可以基于后续的索引变种352相对于新的基础索引生成新的增量索引。
增量和基础索引
在图8中示出了服务系统325的索引服务器处的文档命名空间群组索引(例如731A)的一些实施例中的可能生命周期。
在时间T0处,基础索引的初始版本802A被存储在索引服务器处。基础索引802A可以包括在时间T0之前的某一时间基于当时处于令牌存储库324中的文档表610中的令牌(例如612)生成的一个或多个索引数据库文件351,其对应于属于文档命名空间群组的文档命名空间中的所有文档的最高版本。
后来的某一时间,对于文档命名空间群组中的文档作出一项或多项改变。举例来说,用户可以向群组中的其中一个文档命名空间添加新的文档,编辑群组中的其中一个文档命名空间中的现有文档,或者从群组中的其中一个文档命名空间中移除文档。这些改变导致索引器323向索引服务器发送一项或多项索引变种352。在时间T0之后的时间T1处,索引服务器应用所接收到的索引变种352,从而在索引服务器处创建反映出所述(多项)文档改变的增量索引804。
在时间T1之前(例如在时间T0处),可以仅使用基础索引802A来应答针对属于文档命名空间群组的文档命名空间的查询。在时间T1之后,可以使用基础索引802A和增量索引804全部二者来应答查询,其中来自每一个索引的结果被合并以产生针对查询的应答。
可以对文档命名空间群组中的文档作出一项或多项附加的改变。可以在从索引器323发送到索引服务器的一项或多项附加的索引变种352中反映出所述附加的改变。在时间T1之后的时间T2处,索引服务器应用附加的索引变种352以更新索引服务器处的增量索引804,从而反映出所述(多项)附加的文档改变。在时间T2之后,可以使用基础索引802A和更新后的增量索引804全部二者来应答查询,其中来自每一个索引的结果被合并以产生针对查询的应答。
在时间T2之后的时间T3处,基础索引的新版本802B被存储在索引服务器处。新的基础索引802B替换索引服务器处的当前增量索引804和当前基础索引802A。换句话说,索引服务器丢弃基础索引802A和增量索引804,并且用新的基础索引802B对其进行替换。在时间T3之后,索引服务器使用基础索引802B来应答查询,并且不再使用基础索引802A和增量索引804来应答查询。基础索引802B可以包括在时间T3之前的某一时间处以及在时间T0处或之后基于当时处于令牌存储库324中的文档表610中的令牌(例如612)生成的一个或多个索引数据库文件351,其对应于属于文档命名空间群组的文档命名空间中的所有文档的最高版本。
可以通过若干不同的事件来触发对应于文档命名空间群组索引的基础索引的重建。举例来说,可以按照规则或周期性的间隔(例如每天午夜时)重建基础索引。作为另一个实例,可以在检测到文档命名空间群组索引的当前增量索引已达到或超出预定阈值尺寸(例如一个(1)吉比特)或者达到或超出当前基础索引尺寸的预定百分比尺寸(例如百分之二十五(25%))时重建基础索引。其他事件也可以触发基础索引的重建,本发明不限于任何特定事件或事件集合。
当对应于文档命名空间群组索引的基础索引被建立或重建时,其可以反映出直到特定时间点为止对于文档命名空间群组中的所有文档的所有改变。举例来说,基础索引802A可以反映出直到时间T0之间的某一时间为止对于文档命名空间索引731A的文档命名空间群组中的所有文档的所有改变。类似地,基础索引802B可以反映出直到时间T3之间的某一时间为止并且在时间T0处或之后对于文档命名空间索引731A的文档命名空间群组中的所有文档的所有改变。
利用新的基础索引替换当前增量索引和当前基础索引的循环可以持续重复,以便把增量索引的存储器尺寸与基础索引相比保持得相对较小,从而允许利用索引变种352在索引服务器处更加高效地(例如更加快速地)更新文档命名空间群组索引。
即时索引器
现在参照图9,其是根据本发明的一些实施例的生成针对文档索引328的索引变种352的索引器323的方块图。
在操作中,由建立系统321的令牌化器322获得文档340的新版本。令牌化器322可以响应于另一个系统(未示出)检测到对于文档的改变而获得文档340的新版本。所检测到的改变例如可以是文档的创建(也就是说文档的新版本是文档的第一版本)或者对于文档的修改(也就是说文档的新版本是文档的第二或后续版本)。
在云端数据存储服务的情境中,对于文档的改变可以由用户在他或她的末端用户计算设备(例如311A)上所存储的文档的拷贝(或复制品)上作出。举例来说,用户可以打开存储在该用户的末端用户计算设备上的字处理文档,对字处理文档作出改变(例如编辑),并且随后保存对于字处理文档的改变。令牌化器322可以在改变(或者其增量编码)已经被从用户的末端用户计算设备同步(复制)到云端数据存储服务之后接收到关于改变的通知,所述云端数据存储服务也在一台或多台服务器上存储文档的拷贝(复制品)。举例来说,运行在用户的末端用户计算设备处的软件同步代理可以检测到对于字处理文档的改变,并且把所述改变(或者其增量编码)发送到云端数据存储服务服务器。
在获得文档340的新版本之后,令牌化器322对文档340的新版本进行令牌化,并且作为结果生成对应于文档340的新版本的令牌集合。令牌化器322把对应于文档340的新版本的令牌集合存储在令牌存储库324的文档表610中。
除了把对应于文档340的新版本的令牌集合存储在令牌存储库324的文档表610中之外,令牌化器322生成“改变的文档”消息并且通过消息队列915将其发送到即时索引器服务器910(或者仅仅简称作“即时索引器910”)。在一些实施例中,改变的文档消息包括用于标识令牌化器322对于文档340的新版本存储在令牌存储库324中的文档表610中的令牌集合的行关键字(例如611)或其他信息。
即时索引器910持续地把改变的文档消息从消息队列915的头部退出队列,并且对改变的文档消息进行处理。为了处理改变的文档消息,即时索引器910初始地确定在改变的文档消息中标识出的文档的新版本是对应于新的文档(也就是说文档的第一版本)还是经过修改的文档(也就是说文档的第二或后续版本)。
如果改变的文档消息是用于新的文档,则即时索引器910从令牌存储库324中的文档表610读取由令牌化器322对于文档的新版本所存储的令牌集合。该令牌集合是用以对新文档进行索引的令牌集合。
另一方面,如果改变的文档消息是用于经过修改的文档,则即时索引器910从令牌存储库324中的文档表610读取由令牌化器322对于文档的新版本所存储的令牌集合,并且从令牌存储库324中的索引器-文档表620读取先前由即时索引器910对于文档的当前版本所存储的令牌集合。即时索引器910识别对应于文档的新版本的令牌集合与对应于经过修改的文档的版本的令牌集合之间的差异。根据一些实施例,即时索引器910在对应于文档的新版本的令牌集合中识别出不处在对应于文档的当前版本的令牌集合中的“所添加的”令牌,并且在对应于文档的当前版本的令牌集合中识别出不处在对应于文档的新版本的令牌集合中的“被移除的”令牌。任何这样识别出的所添加的令牌是用以对经过修改的文档进行索引的令牌,并且任何这样识别出的被移除的令牌是不再用以对经过修改的文档进行索引的令牌。
不管改变的文档消息是用于新的文档还是经过修改的文档,即时索引器910随后对于改变的文档把索引变种日记条目(例如931A)添加到索引变种日记930。用于改变的文档的索引变种日记条目包括由即时索引器910对于改变的文档确定的日记时间标记932,以及由即时索引器910对于改变的文档生成的索引变种352。
对于改变的文档确定的日记时间标记932通常反映出当文档被改变时的日期和时间。更具体来说,日记时间标记932可以反映出当文档被改变时与当对应于文档的索引变种日记条目被添加到索引变种日记930时之间的任何时间。举例来说,日记时间标记932可以反映出文档何时被改变,令牌化器322何时对文档的新版本进行令牌化,令牌化器322何时把对应于文档的新版本的令牌集合存储在令牌存储库324中,令牌化器322何时把对应于改变的文档的改变的文档消息添加到消息队列915,即时索引器910何时把对应于改变的文档的改变的文档消息从消息队列915退出,即时索引器910何时生成对应于改变的文档的索引变种352,即时索引器910何时把对应于改变的文档的索引变种日记条目添加到索引变种日记930,或者当文档被改变时与当对应于改变的文档的索引变种日记条目被添加到索引变种日记930时之间的任何其他时间。
在某些情况下,即时索引器910可以从即时索引器910的系统时钟确定用于改变的文档的日记时间标记932。举例来说,即时索引器910可以恰好在把用于改变的文档的索引变种日记条目添加到索引变种日记930之前确定系统时钟的当前数值。所确定的系统时钟的当前数值可以被用作索引变种日记条目中的日记时间标记932。在某些情况下,系统时钟数值在被存储为日记时间标记932之前可以被规范化到特定时区(例如UTC±0),从而使得基于来自系统时钟的数值所确定的日记时间标记932是直接可比较的,而无需考虑系统时钟的特定时区。
在某些情况下,即时索引器910可以从消息队列915中退出队列的对应于改变的文档的改变的文档消息中的时间标记确定对应于改变的文档的日记时间标记932。举例来说,改变的文档消息中的时间标记可以反映出文档何时被改变。改变的文档消息中的时间标记可以被用作用于改变的文档的索引变种日记条目中的日记时间标记932。在某些情况下,所述时间标记在被存储为日记时间标记932之前被规范化到特定时区(例如UTC±0)。
对于改变的文档生成的索引变种352可以包括各种信息,其中包括文档命名空间群组标识符、文档命名空间标识符、文档标识符、将用来对改变的文档进行索引的令牌列表以及/或者将不再用来对改变的文档进行索引的令牌列表。文档标识符可以标识改变的文档。文档命名空间标识符可以标识改变的文档所属的文档命名空间。文档命名空间群组标识符可以标识文档命名空间所属的文档命名空间群组。
服务系统325的索引服务器430存储文档索引328。文档索引328可以在各台索引服务器430上被碎片化,从而使得每一台索引服务器(例如430B)存储文档索引328的一个碎片(例如328B)。每一台索引服务器(例如430A)还可以包括等效的查询处理器327功能。
文档索引328的每一个碎片(例如328B)可以包括一个或多个文档命名空间群组索引(例如731A)。每一个这样的文档命名空间群组索引可以包括如前面所描述的基础索引和增量索引。
索引服务器(例如430A)可以周期性地轮询(例如发送网络请求)索引变种服务器920,以便发现用于该索引服务器的新的索引变种352。在一些实施例中,索引服务器(例如430A)每五(5)到十(10)秒轮询索引变种服务器920一次,以便发现新的索引变种352。但是其他轮询间隔也是可能的,其中包括短于五(5)秒和长于十(10)秒的轮询间隔。
当对索引变种服务器920进行轮询时,索引服务器(例如430B)提供文档命名空间群组的一个或多个文档命名空间群组标识符的列表并且还提供高水印时间标记。索引服务器的高水印时间标记表示一个时间,索引服务器处的碎片(例如328B)直到该时间为止关于索引变种日记930中的索引变种352都处于最新状态。在一些实施例中,高水印时间标记被规范化到特定时区(例如UTC±0),从而使其与索引变种日记930中的日记时间标记932直接可比较。
响应于接收到来自索引服务器的轮询请求,索引变种服务器920对索引变种日记930进行读取以找到任何匹配的索引变种日记条目(例如931A),其具有比索引服务器的高水印时间标记更新(更近)的日记时间标记932并且包括作为在来自索引服务器的轮询请求中指定的其中一个文档命名空间群组标识符的文档命名空间群组标识符。作为响应,所有此类匹配的索引变种日记条目中的索引变种352都被发送到索引服务器。
索引服务器(例如430B)可以把接收自索引变种服务器920的索引变种352应用于索引服务器处的增量索引。具体来说,对于指定文档命名空间群组标识符和文档标识符并且指定将用来对文档进行索引的令牌列表和/或将不再用来对文档进行索引的令牌列表的给定的索引变种352,索引服务器把该索引变种352应用于对应于文档命名空间群组的增量索引。
在一些实施例中,对于将用来对文档进行索引的令牌列表中的每一个令牌,该令牌作为索引关键字被添加在增量索引中(如果其还不是增量索引中的索引关键字的话),并且文档标识符被添加到对应于索引关键字的增量索引中的记录列表(如果其还没有处在记录列表中的话)。如果文档标识符已经处在记录列表中但是在记录列表中被标记成已从记录列表删除,则文档标识符被取消标记(也就是说不被标记成已从记录列表删除)。
在一些实施例中,对于将不再用来对文档进行索引的令牌列表中的每一个令牌,该令牌作为索引关键字被添加在增量索引中(如果其还不是增量索引中的索引关键字的话),并且文档标识符被添加到对应于索引关键字的增量索引中的记录列表,并且文档标识符(如果其还没有处在记录列表中的话)在记录列表中被标记成已从记录列表删除。如果文档标识符已经处在记录列表中但是在记录列表中未被标记成已删除,则文档标识符在记录列表中被标记成已从记录列表删除。
可以通过使用集中不同的可能跟踪方案当中的一种把记录列表中的文档标识符标记成已删除或未删除,其中例如包括每个记录列表的删除比特矢量,其包括对应于在记录列表中标识出的每一个文档的一个比特。所述两比特数值当中的一个比特被用来表明相应的文档由相应的索引项目索引,并且所述两比特数值当中的另一个比特被用来表明相应的文档不再由相应的索引项目索引。
在处理针对包括增量索引和基础索引的文档命名空间群组索引的查询时,查询处理器327从增量索引和基础索引全部二者取回对应于查询关键字的记录列表,并且合并所取回的记录列表。查询处理器327随后可以从查询应答中滤除在合并的记录列表中被标记成已删除的文档。
在索引服务器(例如430A)应用响应于轮询请求接收自索引变种服务器920的索引变种352之后,索引服务器更新索引服务器的高水印时间标记,以便反映出索引服务器处的碎片(例如328A)关于所应用的索引变种352处于最新状态。举例来说,新的高水印时间标记数值可以被设定到响应于轮询请求所应用的所有索引变种352的最新(最近)的日记时间标记932。为了促进这一方面,索引变种服务器920可以在对来自索引服务器的轮询请求作出答复时提供日记时间标记932连同相应的索引变种352。
在一些实施例中,索引变种日记930被实施成只能附加(append-only)的分布式提交日志。通过这样做,当即时索引器910把索引变种日记条目(例如931A)写入到日记930时可以减少盘查找(disk-seeking)。
后面的描述给出了可以利用计算机可执行指令实施的方法步骤,以用于在处理器控制下引导设备的操作。计算机可执行指令可以被存储在计算机可读介质上,比如CD、DVD、闪存等等。计算机可执行指令还可以被存储为可下载计算机可执行指令的集合,以例如用于从因特网位置(例如Web服务器)下载和安装。
虽然通过附图和后面的描述可能暗示了各个方法步骤的特定顺序,但是应当理解的是,除非上下文明确地另有所指,否则可以按照不同于所示出和/或描述的顺序来实施各个方法步骤。此外,除非上下文明确地另有所指,否则可以彼此并行地(并发地)实施各个方法步骤。
即时索引器示例性操作
为了说明即时索引器610的示例性操作,现在将参照图9、图10A、图10B、图11A和图11B。图10A和图10B包括根据本发明的一些实施例的即时索引器910的示例性操作的流程图1000。图11A和图11B示出了根据本发明的一些实施例的即时索引器910的示例性操作期间的令牌存储库324的各种可能的状态。
在步骤1002处,即时索引器910获得关于改变的文档的版本的信息。举例来说,即时索引器910可以在从消息队列915退出队列的改变的文档消息中获得所述信息。所述信息可以包括改变的文档的文档标识符,包含改变的文档的文档命名空间所属的文档命名空间群组的文档命名空间群组标识符,以及改变的文档的版本的文档版本标识符。举例来说,在步骤1002处出于说明一个实例的目的假设即时索引器610获得文档命名空间群组标识符“abcd”,文档标识符“d2”,以及文档版本标识符“2”。在一些实施例中,所述信息包括文档命名空间标识符以作为针对文档命名空间群组标识符的补充或替代。
在步骤1004处,如果可用的话,即时索引器910从索引器-文档表420取回改变的文档的当前版本。举例来说,图11A示出了索引器-文档表620中的改变的文档“d2”的当前版本是“1”,正如通过行关键字“abcd:d2”键控的行中的“元数据”列族中的“修订”列的数值所表明的那样。
在步骤1006处,即时索引器910确定改变的文档的版本是否新的文档。在一些实施例中,即时索引器910通过在步骤1004中确定改变的文档的当前版本是否可用来作出这一确定。如果在步骤1004处在索引器-文档表420中没有改变的文档的当前版本可用,则假设改变的文档的版本是新的文档。否则,假设改变的文档的版本是经过修改的文档。举例来说,由于如图11A的索引器-文档表620中所示,改变的文档“d2”的当前版本是可用的,因此即时索引器910将在步骤1006处确定改变的文档“d2”的版本“2”不是新的文档。
但是如果改变的文档的版本是新的文档,则在步骤1008处,即时索引器910从令牌存储库324的文档表610获得对应于所述新的文档的令牌集合。为了取回对应于新的文档的令牌集合,即时索引器610可以从通过行关键字键控的文档表910的行取回令牌集合,所述行关键字包括在步骤1002处获得的文档命名空间群组标识符、文档标识符以及文档版本标识符。
此外,如果改变的文档的版本是新的文档,则在步骤1010处,即时索引器910生成包括在步骤1008处对于所述新的文档取回的令牌集合的索引变种352。所述令牌集合可以在所生成的索引变种352中被标示成用来对文档进行索引的令牌。所生成的索引变种352还可以包括标识其所涉及的文档、文档命名空间和/或文档命名空间群组的信息,比如在步骤1002处获得的文档标识符、文档命名空间标识符和/或文档命名空间群组标识符。此外,即时索引器910确定日记时间标记932并且把对应于新的文档的日记条目(例如931A)添加到日记930,其中包括索引变种352和日记时间标记932。
此外,如果改变的文档的版本是新的文档,则在步骤1012处把在步骤1008处对于所述新的文档取回的令牌集合存储在索引器-文档表620中。如果改变的文档的版本是新的文档,则可以把对应于所述新的文档的新的行添加到索引器-文档表620,其具有包括在步骤1002处获得的文档群组标识符和文档标识符的行关键字。除了包括在步骤1008处对于新的文档取回的令牌集合之外,所述新的行的元数据列族中的“修订”列的数值被设定到所述新的文档的当前版本。当前版本例如可以是“1”。文档的当前版本表示即时索引器910已处理过(例如为之生成了索引变种352)的文档的最新(最近)版本。
在对于新的文档把新的行添加到索引器-文档表620之后,即时索引器对于改变的文档的版本的处理随后可以结束1014。
回到步骤1006,然而如果在步骤1006处没有把改变的文档的版本确定成新的文档,则认为改变的文档的版本是经过修改的文档的版本。举例来说,由于改变的文档“d2”的当前版本“1”是可用的(如图11A的索引器-文档表620中所示),因此即时索引器910将在步骤1006处确定改变的文档“d2”的版本“2”是经过修改的文档的版本。
在步骤1016处,即时索引器910随后确定经过修改的文档的版本是否经过修改的文档的新版本。如果即时索引器910不是按顺序被通知经过修改的文档的各个版本,则经过修改的文档的版本可能不是经过修改的文档的新版本。举例来说,在对于文档的早前版本从消息队列915退出队列并且处理改变的文档消息之前,即时索引器910可能对于文档的后来版本从消息队列915退出队列并且处理改变的文档消息。
为了确定经过修改的文档的版本是否是经过修改的文档的新版本,即时索引器910可以把在步骤1002处获得的对应于经过修改的文档的版本的文档版本标识符与在步骤1004处从索引器-文档表620获得的经过修改的文档的当前版本进行比较。如果在步骤1002处获得的文档版本标识符大于当前版本,则经过修改的文档的版本是经过修改的文档的新版本。否则,经过修改的文档的版本不是经过修改的文档的新版本,并且对于改变的文档的版本的处理可以结束1018。举例来说,由于文档“d2”的版本“2”大于文档“d2”的当前版本“1”,因此即时索引器910可以确定文档“d2”的版本“2”是文档“d2”的新版本。
如果经过修改的文档的版本是经过修改的文档的新版本,则在步骤1020处,即时索引器910获得对应于经过修改的文档的新版本的令牌集合。所述令牌集合可以从令牌存储库324的文档表610获得,其是由令牌化器322在对经过修改的文档的新版本进行令牌化时存储在该处。为了取回对应于经过修改的文档的新版本的令牌集合,即时索引器610可以从通过行关键字键控的文档表610的行取回令牌集合,所述行关键字包括在步骤1002处获得的文档命名空间群组标识符、文档标识符和文档版本标识符。举例来说,如图11B的文档表610的通过行关键字“abcd:d2:2”键控的行中所示,对应于文档“d2”的版本“2”的令牌集合包括令牌“solved”、“three”、“problems”。
在步骤1024处,即时索引器910获得对应于经过修改的文档的当前版本的令牌集合。该令牌集合可以基于在步骤1004处获得的经过修改的文档的当前版本以及在步骤1002处获得的文档命名空间群组标识符和文档标识符从令牌存储库324的索引器-文档表620获得。举例来说,如图11A的索引器-文档表620的通过行关键字“abcd:d2”键控的行中所示,对应于文档“d2”的当前版本“1”的令牌集合包括令牌“solved”、“two”、“problems”。
在步骤1026处,即时索引器910识别对应于经过修改的文档的当前版本的令牌集合与对应于经过修改的文档的新版本的令牌集合之间的差异。具体来说,即时索引器910识别将用来对经过修改的文档进行索引的令牌以及将不再用来对经过修改的文档进行索引的令牌。可以从不处在对应于经过修改的文档的当前版本的令牌集合中的对应于经过修改的文档的新版本的令牌集合中的令牌识别将用来对经过修改的文档进行索引的令牌。可以从不处在对应于经过修改的文档的新版本的令牌集合中的对应于经过修改的文档的当前版本的令牌集合中的令牌识别将不再用来对经过修改的文档进行索引的令牌。举例来说,令牌“three”将被识别成用来对文档“d2”进行索引的令牌,这是因为令牌“three”处在如图11B的文档表610中所示的对应于文档“d2”的新版本“2”的令牌集合中,但是不处在如图11A的索引器-文档表620中所示的对应于文档“d2”的当前版本“1”的令牌集合中。此外,令牌“two”将被识别成不再用来对文档“d2”进行索引的令牌,这是因为令牌“two”处在如图11A的索引器-文档表620中所示的对应于文档“d2”的当前版本“1”的令牌集合中,但是不处在如图11B的文档表610中所示的对应于文档“d2”的新版本“2”的令牌集合中。
在步骤1028处,即时索引器910生成对应于经过修改的文档的新版本的索引变种352,其中包括在步骤1026处确定的将用来对经过修改的文档进行索引的任何令牌以及在步骤1026处确定的将不再用来对经过修改的文档进行索引的任何令牌。所述令牌可以在索引变种352中被如此标示。所生成的索引变种352还可以包括标识其所涉及的文档、文档命名空间和/或文档命名空间群组的信息,比如在步骤1002处获得的文档标识符、文档命名空间标识符和/或文档命名空间群组标识符。此外,即时索引器910确定日记时间标记932并且把对应于新的文档的日记条目(例如931A)添加到日记930,其中包括索引变种352和日记时间标记932。举例来说,对于文档“d2”的新版本“2”生成并存储的索引变种352可以包括:令牌“three”,其被标示(例如利用标签)成将用来对文档“d2”进行索引的令牌;令牌“two”,其被标示成将不再用来对文档“d2”进行索引的令牌;文档命名空间群组标识符“abcd”;以及文档标识符“d2”。
在步骤1030处,在即时索引器910生成对应于经过修改的文档的新版本的索引变种352之后,在步骤1020处对于经过修改的文档的新版本取回的令牌集合被存储在索引器-文档表620中。在这样做时,索引器-文档表620中的对应于经过修改的文档的新版本的行可以被修改成包括所述令牌集合,并且包括被设定到经过修改的文档的新版本的对应于元数据列族中的“修订”列的新的数值。通过以这种方式修改行,所述新的版本变成经过修改的文档的新的当前版本。举例来说,如图11B的索引器-文档表620中所示,在生成对应于文档“d2”的版本“2”的索引变种352之后,文档“d2”的新的当前版本是“2”。
在索引器-文档表620中把对应于经过修改的文档的行修改成包括所述令牌集合以及所设定的新的当前版本之后,即时索引器对于改变的文档的版本的处理随后可以结束1032。
用于即时索引的处理
现在参照图12A和图12B,其包括根据本发明的一些实施例的由用于即时索引的多用户搜索系统的一台或多台服务器实施的处理的流程图1200。
在步骤1202处,服务器实施存储对应于文档的当前版本的令牌集合,正如这里所描述的那样。举例来说,即时索引器910可以添加或修改令牌存储库324的索引器-文档表620中的对应于文档的当前版本的一行,以便包括对应于文档的当前版本的令牌集合。举例来说,可以对于文档“d2”的当前版本“1”添加图11A的索引器-文档表620中的该行。举例来说,可以对于文档“d2”的当前版本“2”修改图11B的索引器-文档表620中的该行。
在步骤1024处,服务器实施对文档的新版本进行令牌化并且生成对应于文档的新版本的令牌集合,正如这里所描述的那样。举例来说,令牌化器322可以对包括字符序列“solved two problems”的文档“d2”的新版本“2”进行令牌化,并且生成令牌集合“solved”、“two”和“problems”。
在步骤1026处,服务器实施识别对应于文档的新版本的令牌集合与对应于文档的当前版本的令牌集合之间的差异,正如这里所描述的那样。举例来说,即时索引器910可以识别对应于文档“d2”的新版本“2”的令牌集合“solved”、“three”和“problems”与对应于文档“d2”的当前版本“1”的令牌集合“solved”、“two”和“problems”之间的差异。
在步骤1208处,服务器实施基于所识别出的差异确定将用来对文档进行索引的令牌,正如这里所描述的那样。为了作出这一确定,服务器识别不处在对应于文档的当前版本的令牌集合中的对应于文档的新版本的令牌集合中的令牌,正如这里所描述的那样。举例来说,即时索引器910可以识别出用以对文档“d2”进行索引的令牌“three”,这是基于识别出不处在对应于文档“d2”的当前版本“1”的令牌集合“solved”、“two”和“problems”中的对应于文档“d2”的新版本“2”的令牌集合“solved”、“three”和“problems”中的令牌“three”。
在步骤1210处,服务器实施生成包括将用来对文档进行索引的索引变种,正如这里所描述的那样。举例来说,即时索引器910可以生成包括用以对文档“d2”进行索引的令牌“three”的索引变种352。
在步骤1212处,服务器实施把所生成的索引变种与时间标记相关联地存储,正如这里所描述的那样。举例来说,即时索引器910可以把包括用以对文档“d2”进行索引的令牌“three”的所生成的索引变种352与日记时间标记932相关联地存储在索引变种日记930中。
在步骤1214处,服务器实施在与所生成的索引变种相关联的时间标记比由索引服务器指定的时间标记更新的情况下把所生成的索引变种提供到索引服务器,正如这里所描述的那样。举例来说,可以响应于来自索引服务器的针对索引变种的轮询请求而把所生成的索引变种提供到索引服务器。所述轮询请求可以包括前面对于索引服务器所描述的高水印时间标记。如果与所生成的索引变种相关联的时间标记比高水印时间标记更新,则可以把所生成的索引变种提供到索引服务器。对于步骤1214,相关联的时间标记比所指定的时间标记更新是把所生成的索引变种提供到索引服务器的必要非充分条件。举例来说,即使与所生成的索引变种相关联的时间标记比所指定的时间标记更新,如果索引变种是对应于不同的索引服务器,则也可以不把索引变种提供到所述索引服务器。
绕过即时索引
在某些情况下,按照相同的方式来索引对于文档的所有改变的做法可能是低效的。举例来说,在某些情况下,当把文档340的大型集合提供到建立系统321以供在很短的时间量内处理时(例如每秒一万(10,000)个或更多文档340或者每天十亿个或更多文档340),可能更加高效的是绕过由索引器323提供到索引服务器430的即时索引功能。在这种情况下,作为在轮询新的索引变种时由索引变种服务器920把大量索引变种352从索引变种日记930提供到索引服务器430的结果,存储在索引服务器430处的易失性存储器中的增量索引可能变得过大(例如几吉字节或更多)。在最坏情况下,提供到索引服务器(例如430B)的索引变种352的数目可能高到使得索引服务器崩溃或故障。
根据一些实施例,在成批地索引文档时绕过即时索引机制。举例来说,如果用户在其末端用户计算设备处把与云端数据存储服务同步的包含大型文档集合的文件夹从一个文件系统位置移动到另一个文件系统位置,所述移动可能导致生成将由建立系统321处理的大量文档改变。举例来说,用户移动文件夹可能导致对于文件夹内的每一个文档的“删除”文档改变和“添加”文档改变。在这种情况下,对于从文件夹移动导致的文档改变绕过建立系统321的即时索引机制可以避免索引服务器故障。绕过对于成批地重新索引现有文档也可能是有用的,比如通过地理位置之类的新属性重新索引大型文档集合。
在对于一个文档集合绕过即时索引机制时,与对于不绕过即时索引机制的文档所做的一样,由令牌化器322对文档进行处理并且把所提取的令牌存储在令牌存储库324中。但是与不绕过即时索引机制的“非绕过”文档不同,当令牌化器322处理被标示成绕过即时索引机制的“绕过”文档的新版本时,令牌化器322可以向即时索引器服务器910通知对于该文档版本启用绕过。举例来说,被添加到消息队列915的改变的文档消息可以表明文档版本是绕过文档。这样的表明可以利用改变的文档消息中的指定数据字段或标志来作出。关于文档版本是绕过文档版本还是非绕过文档版本的标示可以连同文档一起被提供到令牌化器322。举例来说,元数据可以伴随改变的文档,其表明改变的文档的版本是绕过文档版本还是非绕过文档版本。
在把用于绕过文档的改变的文档消息从消息队列915退出之后,即时索引器910可以生成索引变种352并且把所生成的索引变种352存储在索引变种日记930中,正如即时索引器910在把对应于非绕过文档的改变的文档消息退出队列时所做的那样。但是对于绕过文档的改变所生成的索引变种352可以被标记成绕过。举例来说,索引变种日记条目(例如931A)可以具有比特标志或者包括表明该条目的索引变种352是对应于绕过文档的其他数据。当索引服务器(例如430A)从索引变种服务器920请求新的索引变种352时,索引变种服务器920将不会向索引服务器发送在索引变种日记930中被标记为绕过的任何索引变种352。通过这种方式,不会通过由即时索引器910对于绕过文档生成的索引变种352使得索引服务器被淹没。
虽然在一些实施例中被标记成绕过的索引变种352本身被存储在索引变种日记930中,但是在其他实施例中,被标记成绕过的索引变种352则不被存储在索引变种日记930中。举例来说,索引变种日记可以仅存储非绕过索引变种352,并且即时索引器910可以丢弃被标记成绕过的索引变种352而不把绕过索引变种存储在索引变种日记930中。
由于即时索引机制对于绕过文档被绕过,因此可以直到下一次建立对应于绕过文档所属的文档命名空间群组的静态索引之后才在文档索引328中索引对于绕过文档的改变。
一旦在静态索引中索引了绕过文档,则可以不再将其视为绕过文档,并且可以将其视为非绕过文档。也就是说,对于该文档的后续改变可以由即时索引机制处理,并且可以作为索引变种352被提供到索引服务器(例如430B)以便应用于索引器服务器的对应于文档命名空间群组的增量索引。
在一些实施例中,仍然可能有用的是向即时索引器910通知对于绕过文档的改变,尽管这样的改变并没有作为索引变种352被提供到索引服务器430。这样做仍然可能是有用的,以使得即时索引器910在令牌存储库324中所存储的数据上实施各种簿记步骤。举例来说,即时索引器910可以被配置成删除令牌存储库324中的过时文档版本数据。但是其中令牌化器322不向即时索引器910通知对于绕过文档的改变的实现方式也是可能的。
通过在建立系统321中包括绕过机制,建立系统321可以成批地对一个文档集合进行索引,而不会显著影响索引对于其他文档的改变的性能。举例来说,建立系统321可以对于最近由用户创建的“绕过”文档的大型集合绕过即时索引机制,但是与此同时通过即时索引机制在改变之后的几分钟内使得对于“非绕过”文档的改变是可搜索的。
现在参照图13A,其是根据本发明的一些实施例的改变的文档消息1302的方块图。在令牌化器322对于改变的文档进行令牌化并且生成令牌集合并且将所生成的令牌集合存储在令牌存储库324之后,可以由令牌化器322把改变的文档消息发送到即时索引器910。举例来说,令牌化器322可以在处理改变的文档之后把改变的文档消息1302添加到消息序列915的尾部(末尾)。
改变的文档消息1302包括文档标识符1304、文档命名空间群组标识符1306、文档版本标识符1308以及绕过标志1310。文档标识符1304是改变的文档的标识符。文档命名空间群组标识符1306是包含改变的文档所属的文档命名空间的文档命名空间群组的标识符。在一些实施例中,作为文档命名空间群组标识符1306的补充或替代,改变的文档消息1302包括文档命名空间的文档命名空间标识符。文档版本标识符1308标识改变的文档的版本。绕过标志1310表明改变的文档的版本被指定绕过即时索引机制(即绕过文档版本)还是未被指定绕过即时索引机制(即非绕过文档版本)。举例来说,绕过标志1310可以是一个比特数值或其他数据数值,其表明改变的文档的版本是绕过文档版本还是非绕过文档版本。如果改变的文档版本是绕过文档版本,则由即时索引器910对于改变的文档版本生成的索引变种352将不会由索引变种服务器920从索引变种日记930提供到发出轮询的索引服务器(430C)。但是如果改变的文档版本是非绕过文档版本,则由即时索引器910对于改变的文档版本生成的索引变种352可以被提供到发出轮询的索引服务器(430C)。
现在参照图13B,其是根据本发明的一些实施例的索引变种日记条目(例如931A)的方块图。如图所示,索引变种日记条目可以包括前面所描述的日记时间标记932、绕过标志1312以及前面所描述的索引变种352。
绕过标志1312表明日记条目的索引变种被指定为绕过(即绕过索引变种)还是未被指定为绕过(即非绕过索引变种)。举例来说,绕过标志1312可以是一个比特数值或其他数据数值,其表明索引变种352是绕过索引变种还是非绕过索引变种。如果日记条目的索引变种352是绕过索引变种,则索引变种352将不会由索引变种服务器920提供到发出轮询的索引服务器(例如430C)。但是如果日记条目的索引变种352是非绕过索引变种,则索引变种352可以被提供到发出轮询的索引服务器(例如430C)。
在一些实施例中,日记条目的索引变种352包括该索引变种352所涉及的文档的文档标识符、将用来对文档进行索引的令牌集合以及将不再用来对文档进行索引的令牌集合。在一些实施例中,索引变种352仅包括将用来对文档进行索引的令牌集合,而不包括将不再用来对文档进行索引的令牌集合。在一些实施例中,索引变种352仅包括将不再用来对文档进行索引的令牌集合,而不包括将用来对文档进行索引的令牌集合。在一些实施例中,索引变种352还包括包含文档所属的文档命名空间的文档命名空间群组的文档命名空间群组标识符。在一些实施例中,作为文档命名空间群组标识符的补充或替代,索引变种352还包括文档命名空间的文档命名空间标识符。
扩展和替换方案
虽然具体参照单个优选实施例和某些替换方案以一定细节描述了本发明,但是并不意图把本发明限制到该特定实施例或者那些具体替换方案。因此,本领域技术人员将认识到,可以对优选实施例作出修改而不会背离本发明的教导。

Claims (12)

1.一种由一个或多个计算设备实施的方法,所述方法包括:
生成包括一个或多个令牌的索引变种,其中所述索引变种至少部分地基于所识别出的文档的新版本与文档的先前版本之间的一个或多个差异;
存储所述索引变种和相关联的基于时间的值;
将与所述索引变种相关联的所述相关联的基于时间的值和与所述文档的索引相关联的基于时间的值进行比较;并且
至少部分地基于所述比较,将所述索引变种的所述一个或多个令牌提供给索引服务器;
其中,所述索引服务器是多个索引服务器之一;
其中,所述多个索引服务器包括通过文档命名空间碎片化的文档索引;
其中,所述索引变种包括所述文档所属的文档命名空间的标识符;
其中,所述文档命名空间是用于碎片化所述文档索引的多个文档命名空间之一;
其中,将所述文档所属的所述文档命名空间分配给所述索引服务器中存储的索引碎片;并且
其中将所述索引变种的所述一个或多个令牌提供给索引服务器是至少部分地基于所述索引变种的文档命名空间的标识符的。
2.根据权利要求1所述的方法,其中在所述文档的新版本中而不是在所述文档的先前版本中识别出所述一个或多个令牌中的至少之一。
3.根据权利要求1所述的方法,其中在所述文档的先前版本中而不是在所述文档的新版本中识别出所述一个或多个令牌中的至少之一。
4.根据权利要求1所述的方法,还包括在只能附加的日志中存储所述索引变种和相关联的基于时间的值。
5.根据权利要求1所述的方法,其中提供所述索引变种的一个或多个令牌使得所述索引服务器至少部分地基于所述一个或多个令牌更新所述文档的索引。
6.根据权利要求1所述的方法,其中与所述索引变种相关联的所述基于时间的值是时间标记。
7.根据权利要求1所述的方法,还包括从所述索引服务器接收与所述文档的索引相关联的基于时间的值。
8.根据权利要求1所述的方法,
其中所述比较的结果指示所述索引服务器是否相对于所述索引变种处于最新状态;并且
其中向所述索引服务器提供所述索引变种的一个或多个令牌是至少部分地基于所述比较的结果的。
9.根据权利要求1所述的方法,还包括:
基于来自消息队列的关于所述文档的信息识别所述文档的新版本;
其中所述消息队列存储关于到由内容管理系统管理的一个或多个文档的变化的信息;以及
其中生成所述索引变种是响应于识别所述文档的新版本进行的。
10.根据权利要求1所述的方法,其中所述索引变种是第一索引变种;其中所述文档是第一文档;并且其中所述方法还包括:
生成不是所述第一索引变种的第二索引变种,所述第二索引变种包括至少一个令牌,其中所述第二索引变种至少部分地基于所识别的不是所述第一文档的第二文档的新版本与所述第二文档的先前版本之间的至少一个差异;
存储所述第二索引变种和相关联的绕过标志值;以及
至少部分地基于所述相关联的绕过标志值,确定不向索引服务器提供所述第二索引变种的至少一个令牌。
11.存储指令的一个或多个计算机可读介质,所述指令在由一个或多个计算设备执行时使得实施如在权利要求1-10中的任一项中所述的方法。
12.一种系统,包括:
存储介质;
一个或多个处理器;以及
存储在所述存储介质中并配置成由所述一个或多个处理器执行的指令,所述指令配置成:
生成包括一个或多个令牌的索引变种,其中所述一个或多个令牌至少部分地基于所识别出的文档的新版本与所述文档的先前版本之间的差异;
关联所述索引变种与版本指示器;
将与所述索引变种相关联的所述版本指示器和与所述文档的索引相关联的值进行比较;并且
至少部分地基于所述比较,将所述索引变种的所述一个或多个令牌提供给索引服务器;
其中,所述索引服务器是多个索引服务器之一;
其中,所述多个索引服务器包括通过文档命名空间碎片化的文档索引;
其中,所述索引变种包括所述文档所属的文档命名空间的标识符;
其中,所述文档命名空间是用于碎片化所述文档索引的多个文档命名空间之一;
其中,将所述文档所属的所述文档命名空间分配给所述索引服务器中存储的索引碎片;并且
其中将所述索引变种的所述一个或多个令牌提供给索引服务器是至少部分地基于所述索引变种的文档命名空间的标识符的。
CN201580045069.9A 2014-08-21 2015-05-13 具有用于即时索引的方法的多用户搜索系统 Active CN106605221B (zh)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201462040382P 2014-08-21 2014-08-21
US62/040,382 2014-08-21
US14/555,140 2014-11-26
US14/555,140 US9514123B2 (en) 2014-08-21 2014-11-26 Multi-user search system with methodology for instant indexing
PCT/US2015/030476 WO2016028346A1 (en) 2014-08-21 2015-05-13 Multi-user search system with methodology for instant indexing

Publications (2)

Publication Number Publication Date
CN106605221A CN106605221A (zh) 2017-04-26
CN106605221B true CN106605221B (zh) 2020-09-08

Family

ID=55348447

Family Applications (2)

Application Number Title Priority Date Filing Date
CN201580044811.4A Active CN106575307B (zh) 2014-08-21 2015-05-13 具有用于个人搜索的方法的多用户搜索系统
CN201580045069.9A Active CN106605221B (zh) 2014-08-21 2015-05-13 具有用于即时索引的方法的多用户搜索系统

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN201580044811.4A Active CN106575307B (zh) 2014-08-21 2015-05-13 具有用于个人搜索的方法的多用户搜索系统

Country Status (8)

Country Link
US (8) US9977810B2 (zh)
EP (3) EP3164810B1 (zh)
JP (3) JP6487029B2 (zh)
KR (2) KR101812459B1 (zh)
CN (2) CN106575307B (zh)
AU (3) AU2015303992B2 (zh)
CA (3) CA2956141C (zh)
WO (2) WO2016028345A1 (zh)

Families Citing this family (95)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9760548B2 (en) * 2011-11-30 2017-09-12 The University Of Surrey System, process and method for the detection of common content in multiple documents in an electronic system
JP5863615B2 (ja) * 2012-09-28 2016-02-16 ジーイー・メディカル・システムズ・グローバル・テクノロジー・カンパニー・エルエルシー 画像表示システム及び画像表示装置
US10740505B2 (en) 2014-08-01 2020-08-11 Riffyn, Inc. Systems and methods for process design and analysis
US9977810B2 (en) 2014-08-21 2018-05-22 Dropbox, Inc. Multi-user search system with methodology for personal searching
US10552464B2 (en) * 2014-12-18 2020-02-04 Salesforce.Com, Inc. Identifying relevant material for cases
US9785798B1 (en) * 2015-01-23 2017-10-10 Nacho Cove Inc. Privacy-protecting inter-user digital communication message search
US9183303B1 (en) 2015-01-30 2015-11-10 Dropbox, Inc. Personal content item searching system and method
US9361349B1 (en) 2015-01-30 2016-06-07 Dropbox, Inc. Storage constrained synchronization of shared content items
US9384226B1 (en) 2015-01-30 2016-07-05 Dropbox, Inc. Personal content item searching system and method
US10831715B2 (en) 2015-01-30 2020-11-10 Dropbox, Inc. Selective downloading of shared content items in a constrained synchronization system
US9922201B2 (en) 2015-04-01 2018-03-20 Dropbox, Inc. Nested namespaces for selective content sharing
US10963430B2 (en) 2015-04-01 2021-03-30 Dropbox, Inc. Shared workspaces with selective content item synchronization
US9959306B2 (en) * 2015-06-12 2018-05-01 International Business Machines Corporation Partition-based index management in hadoop-like data stores
US9992236B2 (en) * 2015-06-22 2018-06-05 Dell Products L.P. Systems and methods for providing protocol independent disjoint port names
US10565198B2 (en) 2015-06-23 2020-02-18 Microsoft Technology Licensing, Llc Bit vector search index using shards
US10242071B2 (en) 2015-06-23 2019-03-26 Microsoft Technology Licensing, Llc Preliminary ranker for scoring matching documents
US11392568B2 (en) 2015-06-23 2022-07-19 Microsoft Technology Licensing, Llc Reducing matching documents for a search query
US10733164B2 (en) * 2015-06-23 2020-08-04 Microsoft Technology Licensing, Llc Updating a bit vector search index
US11281639B2 (en) 2015-06-23 2022-03-22 Microsoft Technology Licensing, Llc Match fix-up to remove matching documents
US10467215B2 (en) 2015-06-23 2019-11-05 Microsoft Technology Licensing, Llc Matching documents using a bit vector search index
US10379959B1 (en) * 2015-06-29 2019-08-13 Amazon Technologies, Inc. Techniques and systems for physical manipulation of data storage devices
US10649850B1 (en) 2015-06-29 2020-05-12 Amazon Technologies, Inc. Heterogenous media storage and organization in automated data storage systems
US9852337B1 (en) 2015-09-30 2017-12-26 Open Text Corporation Method and system for assessing similarity of documents
US9571573B1 (en) 2015-10-29 2017-02-14 Dropbox, Inc. Peer-to-peer synchronization protocol for multi-premises hosting of digital content items
US10691718B2 (en) 2015-10-29 2020-06-23 Dropbox, Inc. Synchronization protocol for multi-premises hosting of digital content items
WO2017096099A1 (en) * 2015-12-01 2017-06-08 Integem, Inc. Methods and systems for personalized, interactive and intelligent searches
WO2017096308A1 (en) * 2015-12-04 2017-06-08 Riffyn, Inc. Systems and methods for parsing data in order to form structured data tables
US10838911B1 (en) 2015-12-14 2020-11-17 Amazon Technologies, Inc. Optimization of data request processing for data storage systems
US9537952B1 (en) 2016-01-29 2017-01-03 Dropbox, Inc. Apparent cloud access for hosted content items
US10824671B2 (en) * 2016-04-08 2020-11-03 International Business Machines Corporation Organizing multiple versions of content
US11016955B2 (en) * 2016-04-15 2021-05-25 Hitachi Vantara Llc Deduplication index enabling scalability
US11210279B2 (en) * 2016-04-15 2021-12-28 Apple Inc. Distributed offline indexing
US10049145B2 (en) 2016-04-25 2018-08-14 Dropbox, Inc. Storage constrained synchronization engine
JP6570761B2 (ja) * 2016-04-25 2019-09-04 ドロップボックス, インコーポレイテッド ストレージ制約付きの同期エンジン
US10719532B2 (en) 2016-04-25 2020-07-21 Dropbox, Inc. Storage constrained synchronization engine
US10885009B1 (en) * 2016-06-14 2021-01-05 Amazon Technologies, Inc. Generating aggregate views for data indices
US10868674B2 (en) * 2016-08-12 2020-12-15 ALTR Solutions, Inc. Decentralized database optimizations
SG11201901775SA (en) 2016-09-02 2019-03-28 Futurevault Inc Real-time document filtering systems and methods
WO2018039774A1 (en) 2016-09-02 2018-03-08 FutureVault Inc. Systems and methods for sharing documents
SG11201901778YA (en) 2016-09-02 2019-03-28 Futurevault Inc Automated document filing and processing methods and systems
US10701176B1 (en) * 2016-09-23 2020-06-30 Amazon Technologies, Inc. Messaging using a hash ring with host groups
US10606902B1 (en) * 2016-09-29 2020-03-31 EMC IP Holding Company LLC Method and system for cached early-binding document search
US20180089241A1 (en) * 2016-09-29 2018-03-29 Intel Corporation Context enhanced indexing
US10534856B2 (en) * 2016-10-17 2020-01-14 International Business Machines Corporation Atom-based sensible synchronization for information indexing
US10642872B2 (en) * 2016-10-21 2020-05-05 Salesforce.Com, Inc. System for optimizing content queries
CN108243115B (zh) * 2016-12-26 2021-06-29 新华三技术有限公司 报文处理方法及装置
US10838819B2 (en) * 2017-01-18 2020-11-17 Microsoft Technology Licensing, Llc Including personal relationship metadata within duplicated resources shared across partitioned storage
US10542088B2 (en) 2017-01-18 2020-01-21 Microsoft Technology Licensing, Llc Modifying data resources within party-partitioned storage areas
US10536465B2 (en) 2017-01-18 2020-01-14 Microsoft Technology Licensing, Llc Security for accessing stored resources
US10482096B2 (en) * 2017-02-13 2019-11-19 Microsoft Technology Licensing, Llc Distributed index searching in computing systems
US10909074B2 (en) * 2017-04-18 2021-02-02 Microsoft Technology Licensing, Llc File table index aggregate statistics
KR101961644B1 (ko) * 2017-05-19 2019-03-25 소프트캠프(주) 데이터 분산형 통합 관리시스템
US10338842B2 (en) * 2017-05-19 2019-07-02 Samsung Electronics Co., Ltd. Namespace/stream management
US10089480B1 (en) * 2017-08-09 2018-10-02 Fmr Llc Access control governance using mapped vector spaces
US10701161B2 (en) * 2017-08-28 2020-06-30 Citrix Systems, Inc. Wrapping continuation tokens to support paging for multiple servers across different geolocations
CN107766414B (zh) * 2017-09-06 2020-06-12 北京三快在线科技有限公司 多文档交集获取方法、装置、设备及可读存储介质
US10733163B2 (en) * 2017-09-14 2020-08-04 International Business Machines Corporation Record insertion by generating unique index bases
US10866926B2 (en) 2017-12-08 2020-12-15 Dropbox, Inc. Hybrid search interface
US11210645B2 (en) * 2017-12-21 2021-12-28 Paypal, Inc. Providing multiple authentication elements via a pointing device for user authentication
CN110019985B (zh) * 2017-12-29 2021-09-24 阿里巴巴(中国)有限公司 索引文件的建立、查询方法及装置
US10860614B2 (en) * 2018-03-19 2020-12-08 Landis+Gyr Innovations, Inc. Partitioning data in a clustered database environment
US11176105B2 (en) * 2018-04-27 2021-11-16 Sap Se System and methods for providing a schema-less columnar data store
CN110457528A (zh) * 2018-05-03 2019-11-15 茨特里克斯系统公司 提供基于用户的搜索索引漫游的虚拟化环境
US11216516B2 (en) 2018-06-08 2022-01-04 At&T Intellectual Property I, L.P. Method and system for scalable search using microservice and cloud based search with records indexes
US20200089783A1 (en) * 2018-09-14 2020-03-19 International Business Machines Corporation Collating file change sets as action groups
US11347778B2 (en) * 2018-10-26 2022-05-31 EMC IP Holding Company LLC Scale-out indexing for a distributed search engine
US11190598B2 (en) * 2018-10-31 2021-11-30 Comcast Cable Communications, Llc Methods and systems for session management
US11210293B2 (en) * 2018-11-27 2021-12-28 Sap Se Systems and methods for associating data entries
US11157477B2 (en) * 2018-11-28 2021-10-26 International Business Machines Corporation Handling queries in document systems using segment differential based document text-index modelling
CN109656923B (zh) * 2018-12-19 2020-11-24 北京字节跳动网络技术有限公司 一种数据处理方法、装置、电子设备及存储介质
DE102019108856A1 (de) * 2019-04-04 2020-10-08 Bundesdruckerei Gmbh Datenbankübergreifender Index auf einem verteilten Datenbanksystem
US11055274B2 (en) * 2019-04-24 2021-07-06 Microsoft Technology Licensing, Llc Granular change detection in distributed storage systems
US11108850B2 (en) * 2019-08-05 2021-08-31 Red Hat, Inc. Triangulating stateful client requests for web applications
US11386101B2 (en) 2019-08-08 2022-07-12 Cisco Technology, Inc. Systems and methods for fuzzy search without full text
US11151041B2 (en) * 2019-10-15 2021-10-19 Micron Technology, Inc. Tokens to indicate completion of data storage
US11449548B2 (en) * 2019-11-27 2022-09-20 Elasticsearch B.V. Systems and methods for enriching documents for indexing
CN111078648A (zh) * 2019-11-29 2020-04-28 珠海金山网络游戏科技有限公司 实时获取GoCD执行任务的方法及系统
US11290531B2 (en) 2019-12-04 2022-03-29 Dropbox, Inc. Immediate cloud content item creation from local file system interface
US11334529B2 (en) 2020-01-28 2022-05-17 Citrix Systems, Inc. Recommending files for file sharing system
FR3107416B1 (fr) * 2020-02-14 2022-02-04 Amadeus Sas Tokenisation aléatoire efficace dans un environnement dématérialisé
US11575677B2 (en) 2020-02-24 2023-02-07 Fmr Llc Enterprise access control governance in a computerized information technology (IT) architecture
CN111683140B (zh) * 2020-06-05 2024-03-19 北京百度网讯科技有限公司 用于分发消息的方法和装置
US11531659B2 (en) * 2020-06-29 2022-12-20 EMC IP Holding Company LLC Extensible version history and comparison within a backup
KR20220031256A (ko) 2020-09-04 2022-03-11 주식회사 모카앤제이에스 문서 송신 제어 장치 및 방법
US20220156329A1 (en) * 2020-11-16 2022-05-19 Microsoft Technology Licensing, Llc. Mask-augmented inverted index
US11467949B2 (en) * 2020-12-01 2022-10-11 Salesforce.Com, Inc. Techniques and architectures for providing an isolated runtime context in a shared environment
KR102417824B1 (ko) * 2021-01-20 2022-07-06 주식회사 한글과컴퓨터 복수의 문서 저장소들과 연동하여 클라이언트 단말로부터 수신된 종이 문서의 스캔 이미지와 유사한 문서 파일의 로드를 수행하는 문서 관리 서버 및 그 동작 방법
US11531684B2 (en) * 2021-02-20 2022-12-20 Meta Platforms, Inc. Session-level read your writes consistency among digital data versions in a distributed network
US11726957B2 (en) * 2021-04-07 2023-08-15 Pensando Systems Inc. Methods and systems for a network flow log database
US11550784B2 (en) * 2021-05-10 2023-01-10 Jpmorgan Chase Bank, N.A. Method and system for facilitating universal search
CN113672616B (zh) * 2021-07-22 2023-08-15 北京奇艺世纪科技有限公司 一种数据索引方法、装置、终端及存储介质
US20230208872A1 (en) * 2021-12-23 2023-06-29 Mcafee, Llc Methods and apparatus to determine mutex entropy for malware classification
US20240054102A1 (en) * 2022-08-12 2024-02-15 Google Llc Scalable and Cost-Efficient Information Retrieval Architecture for Massive Datasets
US11893037B1 (en) 2022-09-24 2024-02-06 Bank Of America Corporation Dynamic code generation utility with configurable connections and variables
KR102577032B1 (ko) 2023-06-01 2023-09-11 사단법인 한국선급 설계 규정 검토를 위한 변수 색인 및 플랫폼 고도화 시스템

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1755677A (zh) * 2004-09-27 2006-04-05 微软公司 使用索引关键词的范围搜索系统和方法
CN102567489A (zh) * 2010-12-21 2012-07-11 微软公司 搜索文件

Family Cites Families (126)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07334406A (ja) 1994-06-13 1995-12-22 Hitachi Ltd マルチメディアデータベースシステム
US6151643A (en) 1996-06-07 2000-11-21 Networks Associates, Inc. Automatic updating of diverse software products on multiple client computer systems by downloading scanning application to client computer and generating software list on client computer
US6067541A (en) * 1997-09-17 2000-05-23 Microsoft Corporation Monitoring document changes in a file system of documents with the document change information stored in a persistent log
US6389412B1 (en) 1998-12-31 2002-05-14 Intel Corporation Method and system for constructing integrated metadata
US6510439B1 (en) * 1999-08-06 2003-01-21 Lucent Technologies Inc. Method and system for consistent update and retrieval of document in a WWW server
US6751603B1 (en) 2000-05-16 2004-06-15 Sun Microsystems, Inc. Autocomplete method and apparatus for data file selection
JP2002149970A (ja) * 2000-11-14 2002-05-24 Csk Corp 信用調査システム、信用調査情報処理装置、クライアントシステム、信用調査方法、および、記録媒体
US20020078134A1 (en) 2000-12-18 2002-06-20 Stone Alan E. Push-based web site content indexing
US7068309B2 (en) 2001-10-09 2006-06-27 Microsoft Corp. Image exchange with image annotation
JP2003162449A (ja) * 2001-11-27 2003-06-06 Mitsubishi Electric Corp アクセス統合管理システム、アクセス統合管理装置及び方法並びにプログラム
JP4186456B2 (ja) 2001-11-28 2008-11-26 沖電気工業株式会社 分散ファイル共有システムおよびその制御方法
US7260570B2 (en) 2002-02-01 2007-08-21 International Business Machines Corporation Retrieving matching documents by queries in any national language
AU2003221995A1 (en) * 2002-03-14 2003-09-29 Contentguard Holdings, Inc. System and method for graphical rights expressions
JP2003337819A (ja) * 2002-05-21 2003-11-28 Nec Corp 文書全文検索システム,文書全文検索方法および文書全文検索プログラム
EP2562663A3 (en) * 2002-06-13 2016-05-11 MarkLogic Corporation. Parent-child query indexing for XML databases
JP2004164555A (ja) * 2002-09-17 2004-06-10 Fuji Xerox Co Ltd 検索装置および方法ならびにそのインデクス構築装置および方法
CA2421825C (en) 2002-09-20 2012-07-10 Mks Inc. Version control system for software development
US8204992B2 (en) * 2002-09-26 2012-06-19 Oracle America, Inc. Presence detection using distributed indexes in peer-to-peer networks
US7657597B2 (en) 2002-09-26 2010-02-02 Sun Microsystems, Inc. Instant messaging using distributed indexes
US7398200B2 (en) * 2002-10-16 2008-07-08 Adobe Systems Incorporated Token stream differencing with moved-block detection
US6976038B2 (en) * 2002-10-17 2005-12-13 International Business Machines Corporation Method and apparatus for real time creation and modification of a change log for multi-server synchronization
KR20040039691A (ko) 2002-11-04 2004-05-12 엘지전자 주식회사 정보 검색 시스템의 인덱싱 방법
US8005919B2 (en) 2002-11-18 2011-08-23 Aol Inc. Host-based intelligent results related to a character stream
US7299404B2 (en) * 2003-05-06 2007-11-20 International Business Machines Corporation Dynamic maintenance of web indices using landmarks
US7849401B2 (en) 2003-05-16 2010-12-07 Justsystems Canada Inc. Method and system for enabling collaborative authoring of hierarchical documents with locking
US7779345B2 (en) 2003-07-30 2010-08-17 Aol Inc. Reverse mapping method and apparatus for form filling
US20050055364A1 (en) 2003-08-01 2005-03-10 Ophir Frieder Hardware assisted pruned inverted index component
US7194487B1 (en) 2003-10-16 2007-03-20 Veritas Operating Corporation System and method for recording the order of a change caused by restoring a primary volume during ongoing replication of the primary volume
US7437353B2 (en) 2003-12-31 2008-10-14 Google Inc. Systems and methods for unification of search results
US7424467B2 (en) 2004-01-26 2008-09-09 International Business Machines Corporation Architecture for an indexer with fixed width sort and variable width sort
US7392261B2 (en) 2004-05-20 2008-06-24 International Business Machines Corporation Method, system, and program for maintaining a namespace of filesets accessible to clients over a network
US8949395B2 (en) 2004-06-01 2015-02-03 Inmage Systems, Inc. Systems and methods of event driven recovery management
US7493303B2 (en) 2004-08-04 2009-02-17 International Business Machines Corporation Method for remotely searching a local user index
US8504565B2 (en) * 2004-09-09 2013-08-06 William M. Pitts Full text search capabilities integrated into distributed file systems— incrementally indexing files
US8510657B2 (en) 2004-09-30 2013-08-13 Microsoft Corporation Editing the text of an arbitrary graphic via a hierarchical list
US8126895B2 (en) 2004-10-07 2012-02-28 Computer Associates Think, Inc. Method, apparatus, and computer program product for indexing, synchronizing and searching digital data
US20110029504A1 (en) 2004-12-03 2011-02-03 King Martin T Searching and accessing documents on private networks for use with captures from rendered documents
JP2006185368A (ja) * 2004-12-28 2006-07-13 Matsushita Electric Ind Co Ltd 文書データベース更新処理装置、文書データベース検索装置、文書データベース索引作成方法及び文書データベース検索方法
KR100672277B1 (ko) 2005-05-09 2007-01-24 엔에이치엔(주) 개인화 검색 방법 및 검색 서버
US7512620B2 (en) 2005-08-19 2009-03-31 Google Inc. Data structure for incremental search
US7779347B2 (en) 2005-09-02 2010-08-17 Fourteen40, Inc. Systems and methods for collaboratively annotating electronic documents
US20070067726A1 (en) 2005-09-16 2007-03-22 Microsoft Corporation Content sharing user interface for mobile devices
JP4626483B2 (ja) 2005-10-27 2011-02-09 ソニー株式会社 サーバ装置、データ処理方法、プログラムおよび通信方法
KR101153534B1 (ko) 2005-11-15 2012-06-11 엔에이치엔(주) 웹 데이터 및 로컬 데이터에 대한 데이터 자동 태깅 방법및 데이터 자동 태깅 시스템
US7716180B2 (en) 2005-12-29 2010-05-11 Amazon Technologies, Inc. Distributed storage system with web services client interface
US7634517B1 (en) 2006-02-10 2009-12-15 Google Inc. System and method for dynamically updating a document repository without interrupting concurrent querying
US9177124B2 (en) * 2006-03-01 2015-11-03 Oracle International Corporation Flexible authentication framework
US7725431B2 (en) 2006-06-30 2010-05-25 Nokia Corporation Method and apparatus for the synchronization and storage of metadata
US20080250021A1 (en) 2006-09-08 2008-10-09 Donald Robert Martin Boys Method for Searching Private Data Via a Public Data Search Interface
US9141627B2 (en) 2006-09-26 2015-09-22 Sony Corporation Providing a user access to data files distributed in a plurality of different types of user devices
US7840537B2 (en) * 2006-12-22 2010-11-23 Commvault Systems, Inc. System and method for storing redundant information
US20080243788A1 (en) 2007-03-29 2008-10-02 Reztlaff James R Search of Multiple Content Sources on a User Device
US7716224B2 (en) 2007-03-29 2010-05-11 Amazon Technologies, Inc. Search and indexing on a user device
US7693813B1 (en) 2007-03-30 2010-04-06 Google Inc. Index server architecture using tiered and sharded phrase posting lists
US7702614B1 (en) * 2007-03-30 2010-04-20 Google Inc. Index updating using segment swapping
US20080271156A1 (en) 2007-04-30 2008-10-30 Lipinski Gregory J Methods and systems for searching protected digital content and non-protected digital content
US8234282B2 (en) 2007-05-21 2012-07-31 Amazon Technologies, Inc. Managing status of search index generation
KR100912870B1 (ko) 2007-06-12 2009-08-19 삼성전자주식회사 컨텐츠 및 메타데이터의 무결성 보장 시스템 및 방법
US8887297B2 (en) * 2007-07-13 2014-11-11 Microsoft Corporation Creating and validating cryptographically secured documents
US8046367B2 (en) 2007-08-20 2011-10-25 Microsoft Corporation Targeted distribution of search index fragments over a wireless communication network
US20090063448A1 (en) 2007-08-29 2009-03-05 Microsoft Corporation Aggregated Search Results for Local and Remote Services
US20090083268A1 (en) 2007-09-25 2009-03-26 International Business Machines Corporation Managing variants of artifacts in a software process
JP4661851B2 (ja) 2007-09-28 2011-03-30 富士ゼロックス株式会社 文書管理システム、文書利用制御装置、文書保管装置及びプログラム
US7961878B2 (en) 2007-10-15 2011-06-14 Adobe Systems Incorporated Imparting cryptographic information in network communications
NO327653B1 (no) * 2007-12-20 2009-09-07 Fast Search & Transfer As Fremgangsmate for dynamisk oppdatering av en indeks og en sokemotor som implementerer samme
US20090228528A1 (en) 2008-03-06 2009-09-10 International Business Machines Corporation Supporting sub-document updates and queries in an inverted index
US8533238B2 (en) 2008-04-30 2013-09-10 Microsoft Corporation Sharing information about a document across a private computer network
US20090276401A1 (en) 2008-05-02 2009-11-05 Motorola, Inc. Method and apparatus for managing associative personal information on a mobile communication device
US8340131B2 (en) 2008-05-05 2012-12-25 Sentilla Corporation, Inc. Efficient broadcast of data in a communication network
US20140032703A1 (en) 2008-05-30 2014-01-30 Matthew A. Wormley System and method for an expandable computer storage system
US8620923B1 (en) 2008-05-30 2013-12-31 Adobe Systems Incorporated System and method for storing meta-data indexes within a computer storage system
US8315953B1 (en) 2008-12-18 2012-11-20 Andrew S Hansen Activity-based place-of-interest database
AU2010253843B2 (en) 2009-05-27 2015-12-03 Google Inc. Computer application data in search results
US8407241B2 (en) * 2009-06-12 2013-03-26 Microsoft Corporation Content mesh searching
US20110078243A1 (en) * 2009-09-30 2011-03-31 Boopsie, Inc. Leveraging Collaborative Cloud Services to Build and Share Apps
US8756215B2 (en) 2009-12-02 2014-06-17 International Business Machines Corporation Indexing documents
US8893120B2 (en) 2010-01-29 2014-11-18 Howard Pinsky Controlled use medical applicaton
US8244701B2 (en) * 2010-02-12 2012-08-14 Microsoft Corporation Using behavior data to quickly improve search ranking
US8244700B2 (en) 2010-02-12 2012-08-14 Microsoft Corporation Rapid update of index metadata
US20110225627A1 (en) 2010-03-11 2011-09-15 Ricoh Company, Ltd. Access Limited Search Results
US8825602B1 (en) 2010-03-15 2014-09-02 Symantec Corporation Systems and methods for providing data protection in object-based storage environments
US8909669B2 (en) * 2010-03-30 2014-12-09 Private Access, Inc. System and method for locating and retrieving private information on a network
US8805833B2 (en) 2010-11-24 2014-08-12 Microsoft Corp. Enhancing personal data search with information from social networks
US8983902B2 (en) * 2010-12-10 2015-03-17 Sap Se Transparent caching of configuration data
US9047363B2 (en) * 2010-12-14 2015-06-02 Oracle International Corporation Text indexing for updateable tokenized text
US8527497B2 (en) * 2010-12-30 2013-09-03 Facebook, Inc. Composite term index for graph data
US9111106B2 (en) * 2011-01-13 2015-08-18 Mitsubishi Electric Corporation Data processing apparatus and data storage apparatus
US9043358B2 (en) 2011-03-09 2015-05-26 Microsoft Technology Licensing, Llc Enterprise search over private and public data
US9152736B2 (en) * 2011-03-11 2015-10-06 Google Inc. Efficient indexing and searching of access control listed documents
JP2014527208A (ja) 2011-06-08 2014-10-09 スグループルス,インク. グループ認証の方法およびソフトウェア
US9152697B2 (en) 2011-07-13 2015-10-06 International Business Machines Corporation Real-time search of vertically partitioned, inverted indexes
KR20130023567A (ko) 2011-08-29 2013-03-08 삼성전자주식회사 파일 복사 수행 방법 및 장치
US9251505B2 (en) 2011-09-28 2016-02-02 International Business Machines Corporation Network contact management
US8996456B2 (en) 2011-11-14 2015-03-31 Google Inc. Data processing service
US8560496B2 (en) 2011-11-29 2013-10-15 Microsoft Corporation Database query across processes with change notification
US10257109B2 (en) 2012-01-18 2019-04-09 International Business Machines Corporation Cloud-based content management system
KR20130086005A (ko) 2012-01-20 2013-07-30 삼성전자주식회사 다수의 장치들에서 데이터 검색 방법 및 장치
WO2013147785A1 (en) * 2012-03-29 2013-10-03 Hitachi Data Systems Corporation Highly available search index with storage node addition and removal
CN102663086B (zh) * 2012-04-09 2014-05-07 华中科技大学 一种数据块索引的检索方法
US8868677B2 (en) 2012-04-16 2014-10-21 HGST Netherlands B.V. Automated data migration across a plurality of devices
US9294550B2 (en) 2012-06-11 2016-03-22 Zerodesktop, Inc. Efficient data transfer for cloud storage by centralized management of access tokens
WO2014010082A1 (ja) * 2012-07-13 2014-01-16 株式会社日立ソリューションズ 検索装置、検索装置の制御方法及び記録媒体
US9607001B2 (en) * 2012-07-13 2017-03-28 Facebook, Inc. Automated failover of a metadata node in a distributed file system
US8935255B2 (en) * 2012-07-27 2015-01-13 Facebook, Inc. Social static ranking for search
US20140047349A1 (en) 2012-08-09 2014-02-13 Pro Softnet Corporation Application Neutral Visual Sharing
US9384736B2 (en) 2012-08-21 2016-07-05 Nuance Communications, Inc. Method to provide incremental UI response based on multiple asynchronous evidence about user input
US20140060253A1 (en) 2012-08-28 2014-03-06 Thomas William Brew Methods of manufacturing a die body
US9245003B2 (en) 2012-09-28 2016-01-26 Emc Corporation Method and system for memory efficient, update optimized, transactional full-text index view maintenance
WO2014074924A2 (en) 2012-11-08 2014-05-15 Ingersoll-Rand Company System, apparatus, and methods for server and computer interaction via web cookies
US9613165B2 (en) 2012-11-13 2017-04-04 Oracle International Corporation Autocomplete searching with security filtering and ranking
US9069857B2 (en) * 2012-11-28 2015-06-30 Microsoft Technology Licensing, Llc Per-document index for semantic searching
US9183239B2 (en) * 2012-12-04 2015-11-10 Linkedin Corporation Optimizing a content index for target audience queries
US10346560B2 (en) 2013-02-14 2019-07-09 Plangrid, Inc. Electronic blueprint system and method
EP4224324A3 (en) 2013-02-27 2023-09-27 Hitachi Vantara LLC Rain-based archival system with self-describing objects
US10341275B2 (en) 2013-04-03 2019-07-02 Dropbox, Inc. Shared content item commenting
US20140379661A1 (en) 2013-06-20 2014-12-25 Cloudfinder Sweden AB Multi source unified search
US20150026153A1 (en) * 2013-07-17 2015-01-22 Thoughtspot, Inc. Search engine for information retrieval system
US20150112996A1 (en) * 2013-10-23 2015-04-23 Microsoft Corporation Pervasive search architecture
US9542391B1 (en) * 2013-11-11 2017-01-10 Amazon Technologies, Inc. Processing service requests for non-transactional databases
US20150193399A1 (en) 2014-01-09 2015-07-09 Nokia Corporation Method and apparatus for determining partial updates for a document object model
US10749989B2 (en) 2014-04-01 2020-08-18 Microsoft Technology Licensing Llc Hybrid client/server architecture for parallel processing
CN103955498A (zh) * 2014-04-22 2014-07-30 北京联时空网络通信设备有限公司 一种搜索引擎创建方法及装置
US9977810B2 (en) 2014-08-21 2018-05-22 Dropbox, Inc. Multi-user search system with methodology for personal searching
US9384226B1 (en) 2015-01-30 2016-07-05 Dropbox, Inc. Personal content item searching system and method
US9183303B1 (en) 2015-01-30 2015-11-10 Dropbox, Inc. Personal content item searching system and method
US10324614B2 (en) 2015-10-12 2019-06-18 Dropbox, Inc. Sharing a file with a single contact

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1755677A (zh) * 2004-09-27 2006-04-05 微软公司 使用索引关键词的范围搜索系统和方法
CN102567489A (zh) * 2010-12-21 2012-07-11 微软公司 搜索文件

Also Published As

Publication number Publication date
US10817499B2 (en) 2020-10-27
JP2017532626A (ja) 2017-11-02
EP3164809A1 (en) 2017-05-10
EP3206141A1 (en) 2017-08-16
EP3206141B1 (en) 2020-03-04
JP6487029B2 (ja) 2019-03-20
US10579609B2 (en) 2020-03-03
US20160055143A1 (en) 2016-02-25
CN106575307B (zh) 2020-07-03
US20160055185A1 (en) 2016-02-25
US20160055188A1 (en) 2016-02-25
EP3164810A1 (en) 2017-05-10
AU2015303991C1 (en) 2017-09-07
JP2017532625A (ja) 2017-11-02
CA3009686C (en) 2021-05-04
US20160055248A1 (en) 2016-02-25
AU2015303991A1 (en) 2017-02-23
US10853348B2 (en) 2020-12-01
WO2016028346A1 (en) 2016-02-25
KR101812459B1 (ko) 2018-01-25
US10102238B2 (en) 2018-10-16
AU2017200641A1 (en) 2017-02-23
JP2017152007A (ja) 2017-08-31
US20180253461A1 (en) 2018-09-06
KR101965987B1 (ko) 2019-04-04
US20180253460A1 (en) 2018-09-06
US9984110B2 (en) 2018-05-29
CN106575307A (zh) 2017-04-19
WO2016028345A1 (en) 2016-02-25
AU2017200641C1 (en) 2018-11-29
CA3009686A1 (en) 2016-02-25
KR20170033410A (ko) 2017-03-24
CA2956145A1 (en) 2016-02-25
CA2956145C (en) 2020-03-10
KR20170029010A (ko) 2017-03-14
CA2956141A1 (en) 2016-02-25
EP3164810B1 (en) 2019-08-14
EP3164809B1 (en) 2018-10-24
US9977810B2 (en) 2018-05-22
US9514123B2 (en) 2016-12-06
US9792315B2 (en) 2017-10-17
CN106605221A (zh) 2017-04-26
AU2015303991B2 (en) 2017-03-30
AU2015303992B2 (en) 2018-08-09
US20170011084A1 (en) 2017-01-12
AU2017200641B2 (en) 2018-08-02
JP6431114B2 (ja) 2018-11-28
AU2015303992A1 (en) 2017-02-23
US20170300520A1 (en) 2017-10-19
JP6446532B2 (ja) 2018-12-26
CA2956141C (en) 2020-07-21

Similar Documents

Publication Publication Date Title
CN106605221B (zh) 具有用于即时索引的方法的多用户搜索系统

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant