CN103874996B - 用于利用散列来执行基于全文的逻辑运算的方法 - Google Patents

用于利用散列来执行基于全文的逻辑运算的方法 Download PDF

Info

Publication number
CN103874996B
CN103874996B CN201280025701.XA CN201280025701A CN103874996B CN 103874996 B CN103874996 B CN 103874996B CN 201280025701 A CN201280025701 A CN 201280025701A CN 103874996 B CN103874996 B CN 103874996B
Authority
CN
China
Prior art keywords
hash
bucket
data structure
operator
data
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.)
Expired - Fee Related
Application number
CN201280025701.XA
Other languages
English (en)
Other versions
CN103874996A (zh
Inventor
金在光
韩赫
陈成日
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.)
REALTIMETECH Co Ltd
Original Assignee
REALTIMETECH Co Ltd
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 REALTIMETECH Co Ltd filed Critical REALTIMETECH Co Ltd
Publication of CN103874996A publication Critical patent/CN103874996A/zh
Application granted granted Critical
Publication of CN103874996B publication Critical patent/CN103874996B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2255Hash tables
    • 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/325Hash tables
    • 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/33Querying
    • G06F16/3331Query processing
    • G06F16/334Query execution
    • G06F16/3341Query execution using boolean model
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30029Logical and Boolean instructions, e.g. XOR, NOT

Abstract

提供用于利用散列来执行基于全文的逻辑运算的方法,该方法包括:(a)生成具有根据逻辑算子的类型改变的逻辑状态的散列数据结构,以对应于第一逻辑算子;(b)将与第一运算对象数据相对应的散列节点插入到从散列数据结构顺序地分配的桶中;以及(c)如果当前逻辑算子的类型为AND,则选择在步骤(b)中被插入在散列数据中的桶或者作为先前运算的结果值而选择的桶当中的、和与第二运算对象数据相对应的散列节点一致的桶,作为结果值,如果当前逻辑算子的类型为OR,则将未从散列数据结构检索到的与第二运算对象数据相对应的散列节点当中的散列节点插入到从散列数据结构顺序地分配的桶中,并且选择散列数据结构内的所有有效桶作为结果值。

Description

用于利用散列来执行基于全文的逻辑运算的方法
技术领域
本发明涉及用于有效执行被用于从基于全文的数据库中检索关键字的逻辑运算的方法,更具体地,涉及用于在其中系统资源有限的移动终端上利用最小资源来有效执行逻辑运算的方法。
背景技术
信息检索系统是这样一种系统,即,该系统从其中被预测是用户所需的信息或数据之前被收集、处理以及操作并且按该信息或数据可以被容易找到的形状累积的数据库中快速检索适于用户需要的信息,该系统向用户提供该信息。
信息检索系统根据数据库中累积的信息的类型而被分类成引文检索、事实检索,以及全文检索。引文检索是,检索主要操作用户要寻找的主题的文献的书目记录,并且在线信息检索系统(如DIRLOG、BRS等)对应于引文检索。事实检索是,检索一般数据、数值数据以及事实数据,而化学文摘服务在线(CAS)(由此检索化学药品)、电子信息服务(EMIS)(由此检索半导体材料的数据)等属于事实检索的范畴。全文检索是,在需要时从累积文献的全文的数据库中检索书目数据、对应文本或全部原始文本。其中可以检索法律信息的LEXIS或WESTLAS、其中可以检索论文的NEXIS、Dow Jones检索等属于全文检索的范畴。
对于被用于从基于全文的数据库中检索关键字的逻辑运算来说,需要大容量计算资源。然而,可以在移动环境中使用的计算资源有限,致使检索速度在执行逻辑运算时降低。
由此,在移动终端上的基于全文的检索系统中,所提供逻辑算子的使用数非常有限,致使不能提供有效关键字检索。
发明内容
本发明提供了一种用于利用散列来执行基于全文的逻辑运算的方法,由此,提出了一种利用散列来估算基于全文的逻辑算子的方法,使得可以在系统资源有限的移动终端上利用最小资源来执行最佳AND/OR逻辑运算,并且使得逻辑运算结果数据可以在执行了逻辑运算之后从外部获得。
根据本发明一方面,提供了一种用于利用散列来执行基于全文的逻辑运算的方法,该方法包括以下步骤:(a)生成具有根据逻辑算子的类型改变的逻辑状态的散列数据结构,以对应于第一逻辑算子;(b)将与第一运算对象数据相对应的散列节点插入到从所述散列数据结构顺序地分配的桶中;以及(c)如果当前逻辑算子的类型为AND,则选择在步骤(b)中被插入在所述散列数据中的桶或者作为先前运算的结果值而选择的桶当中的、和与第二运算对象数据相对应的散列节点一致的桶,作为结果值,如果当前逻辑算子的类型为OR,则将未从所述散列数据结构检索到的与所述第二运算对象数据相对应的所述散列节点当中的散列节点插入到从所述散列数据结构顺序地分配的所述桶中,并且选择所述散列数据结构内的所有有效桶作为结果值。
根据本发明另一方面,提供了一种计算机可读记录介质,该计算机可读记录介质上记录有散列数据结构和用于利用散列来执行基于全文的逻辑运算的用户接口,其中,所述散列数据结构包括:散列函数,该散列函数根据其中将散列标识符(ID)用作输入值的MOD运算而生成;散列表,该散列表是指定与散列键相对应的桶的开始位置的散列节点的列表集;以及桶块,在该桶块中,每一个桶都包括针对散列链的散列ID和指针,并且其中,所述用户接口包括:启动模块,该启动模块生成具有根据逻辑算子的类型改变的逻辑状态的散列数据结构,以对应于第一逻辑算子,并且分配和初始化存储器;插入模块,该插入模块将与第一运算对象数据相对应的散列节点插入到从所述散列数据结构顺序地分配的桶中;以及逻辑模块,如果当前逻辑算子的类型为AND,则选择被所述插入模块插入在所述散列数据中的桶或者作为先前运算的结果值而选择的桶当中的、和与第二运算对象数据相对应的散列节点一致的桶,作为结果值,如果当前逻辑算子的类型为OR,则将未从所述散列数据结构检索到的与所述第二运算对象数据相对应的所述散列节点当中的散列节点插入到从所述散列数据结构顺序地分配的所述桶中。
附图说明
图1例示了根据本发明的实施方式的、在用于利用散列来执行基于全文的逻辑运算的方法中所使用的散列数据结构;
图2例示了在本发明中使用的用户接口当中执行启动模块的操作;
图3例示了在本发明中使用的用户接口当中执行清除模块的操作;
图4例示了在本发明中使用的用户接口当中执行插入模块的操作;
图5例示了在本发明中使用的用户接口当中执行逻辑模块的操作;
图6例示了在本发明中使用的用户接口当中执行逻辑改变模块的操作;
图7例示了在本发明中使用的用户接口当中执行尺寸模块的操作;
图8例示了在本发明中使用的用户接口当中执行下一个(Next)模块的操作;
图9A到9C例示了根据本发明实施方式的表和索引;以及
图10A到14E例示了根据本发明实施方式的检索的插入操作、逻辑运算以及结果。
具体实施方式
下面,参照附图,对本发明进行更全面描述,其中,示出了本发明的示例性实施方式。
下面,参照图1,对根据本发明实施方式的、在用于利用散列来执行基于全文的逻辑运算的方法中所使用的散列数据结构进行描述。
在本发明中使用的散列数据结构可以包括:散列函数(未示出)、散列表10、桶块20、光标40、AND计数器50,以及OR计数器51。
散列函数是其中通过输入散列标识符(ID)而生成散列键的函数。散列函数可以通过MOD运算来生成。而且,全文数据库的记录ID被用作散列ID。
散列表10是指定与散列键相对应的桶30的开始位置的散列节点的列表集。散列表10的尺寸利用由用户输入的预计数(PreCount)来确定,并且可以被确定为比桶块20的尺寸更大一点的质数,以用于桶30的均匀分布。
作为被插入到散列中的数据结构的桶30每一个均包括针对散列链32的散列ID和指针,以在散列彼此冲突时检索对应桶30。用于确定针对散列节点的、要通过用户输入的逻辑运算的结果值和数据(用户数据1和用户数据2)的计数器可以包括在桶30中。
桶块20是存储缓冲区,该存储缓冲区利用作为要插入到散列中的桶30的可预测数的预计数来预先生成。
光标40被用于指定桶块20上的桶30的位置,并且支持容易从外部获取的逻辑运算的结果。
AND计数器50被用于计数AND逻辑运算的结果值的数量,而OR计数器51被用于计数OR逻辑运算的结果值的数量。
在本发明中,设置作为存储器管理器60的模块,并且存储器管理器60管理在散列中使用的存储器,具体来说,管理自动添加要插入当前桶的位置信息和桶块20的功能。存储器管理器60根据预定范围预先指定桶块20的尺寸,并且确定根据从用户输入的PreCount值所属于的范围的值,作为要生成的桶块20的尺寸。这里,桶块20的尺寸可以被确定为2n(其中,n是整数)以易于存储器管理。由用户输入的PreCount可以指定,以使两个或三个桶30可以呈现在散列链32内。有效的是,通过索引在与逻辑运算的第一运算对象数据相对应的集合中使用许多散列节点。
如果实际插入的桶30的数量大于桶块20的尺寸,则存储器管理器60自动生成新的桶块20。由此,在根据现有技术的散列数据结构中,只要当在散列彼此冲突时生成桶30时,都需要分配新的存储器空间,并且桶需要按连接列表形状配置。然而,根据本发明,已经在桶块20内生成的桶30可以顺序地分配并且可以按连接列表形状配置。
在本发明中使用的用户接口包括:启动、清除、插入、逻辑、逻辑改变、尺寸,以及下一个。
(1)启动模块
如图2所示,启动模块执行初始化和资源分配以使用散列。
输入值由逻辑算子、算子数以及桶的可预测数PreCount组成。
逻辑算子是AND或OR。
算子数是其中AND或OR逻辑算子连续出现的数量。例如,当逻辑运算“A AND B ANDC”呈现在集合A、B以及C上时,算子数为2。
桶的可预测数PreCount被用作用来确定散列表10的尺寸和桶块20的尺寸的重要输入值。
下面,对要由启动模块执行的操作进行描述。
初始化逻辑运算Hash(散列)的所有变量项(S100)。
桶块20的尺寸和散列表10的尺寸利用由用户输入的值PreCount确定(S110)。桶管理器60根据预定范围预先指定桶块20的尺寸,并且确定根据从用户输入的PreCount值所属于的范围的值,作为要生成的桶块20的尺寸。这里,桶块20的尺寸可以被确定为2n(其中,n是整数)以易于存储器管理。而且,散列表10的尺寸被确定为比桶块20的尺寸更大一点的质数。
利用散列表10的所确定尺寸将存储器分配给散列表10,并且初始化存储器(S120)。
随后,生成具有根据输入逻辑算子的类型AND或OR改变的逻辑状态的散列数据结构(S130、S140)。即,桶的类型被分类成用于AND逻辑运算的桶30a和用于OR逻辑运算的桶30b,并且计数器被附加地包括在用于AND逻辑运算的桶30a中。该计数器被用于执行AND逻辑运算。在处于AND逻辑状态的散列数据结构中,仅可以执行AND逻辑运算,而在处于OR逻辑状态的散列数据结构中,仅可以执行OR逻辑运算。然而,如果逻辑算子的类型被改变成另一类型,则散列数据结构的逻辑状态可以通过下面将描述的逻辑改变模块来改变。
(2)清除模块
如图3所示,清除模块执行完成所有逻辑运算的功能和释放散列内的资源的功能。
不存在输入值。
下面,对要由清除模块执行的操作进行描述。
返回桶块20的存储器(S200),并且返回散列表10的存储器(S210),接着初始化所有变量项(S220)。
(3)插入模块
如图4所示,插入模块将第一运算对象数据插入到已初始化散列数据结构中,以执行逻辑运算。如果集合A和B上存在运算“A AND B”,则插入模块执行将集合A的元素之一插入散列中的功能。
输入值是要作为散列节点输入的用户数据资料。
散列节点(数据资料):由要在散列函数中使用的散列ID和由用户输入的其它数据组成。
下面,对要由插入模块执行的操作进行描述。
首先,检索要输入的数据是否已经存在于散列中(S300)。即,检索散列中是否存在具有和输入散列节点的散列ID相同的散列ID的桶。
作为检索的结果,如果存在已经存在于散列中的数据,则不执行操作。
作为检索的结果,如果散列中不存在数据,则从存储器管理器60分配一个桶(S310),并且利用散列函数生成散列键(S320),接着将所分配桶连接至对应于该散列键的散列链(S330),从而将输入数据记录在所分配桶中(S340)。
OR计数器值增加1(S350)。
(4)逻辑模块
如图5所示,逻辑模块通过输入在逻辑算子之后放置的运算对象来执行逻辑运算。如果集合A和B上存在运算“A AND B”,则逻辑模块在集合B的多个元素之一上按散列执行AND运算函数,而如果集合A和B上存在运算“A OR B”,则逻辑模块在集合B的多个元素之一上按散列执行OR运算函数。
输入值由算子编号和散列节点(数据资料)组成。
算子编号:意指连续相同逻辑运算中的逻辑算子的顺序。例如,当存在逻辑运算“AAND B AND C AND D”时,算子数为3,而当执行第一逻辑运算(A AND B)时,算子编号为1,当执行第二逻辑运算((第一逻辑运算的结果)AND C)时,算子编号为2,当执行第三逻辑运算((第二逻辑运算的结果)AND D)时,算子编号为3。
散列节点(数据资料):由要在散列函数中使用的散列ID和由用户输入的其它数据组成。
如果当前逻辑算子的类型为AND,则逻辑模块选择在通过插入模块插入在散列数据结构中的桶或者作为先前运算的结果值而选择的桶当中的和与第二运算对象数据相对应的散列节点一致的桶,作为结果值。另一方面,在当前逻辑算子的类型为OR时,如果没有从散列数据结构检索到与第二运算对象数据相对应的散列节点,则逻辑模块执行将散列节点插入到从散列数据结构顺序地分配的桶中的操作。下面,对其详细操作进行描述。
首先,执行要输入的数据是否已经存在于散列中的检索(S400)。即,检索散列中是否存在具有和输入散列节点的散列ID相同的散列ID的桶。
作为操作S400中的检索的结果,如果检索到该数据已经存在于散列中,则检查当前逻辑算子是AND还是OR(S410)。当前逻辑算子被设置为通过启动模块输入的逻辑算子,如果执行逻辑改变模块,则将当前逻辑算子改变成最近输入的逻辑算子。
作为操作S400中的检索的结果,如果检索到要输入的数据已经存在于散列中并且当前逻辑算子为AND,则当检索到的桶的计数器值和通过将输入算子编号减去1而获取的值相同(直至先前运算作为AND逻辑运算的结果值的桶)时(S420),检索到的桶的计数器值增加1(当前运算的结果值)(S430),如果检索到的桶的计数器的增加的计数器值与通过启动模块或逻辑改变模块输入的算子的数量一致(AND运算的最终结果值)(S440),则AND计数器值增加1(S450)。与此相反,当检索到的桶的计数器值和通过将输入的算子的数量减去1而获取的值不同,或者检索到的桶的增加的计数器值和通过启动模块或逻辑改变模块输入的算子的数量不同时,不执行操作。
如果在操作S400中的检索没有结果,则检查当前逻辑算子是AND还是OR(S460)。
如果操作S400中的检索没有结果并且当前逻辑算子为AND,则不执行操作。
如果操作S400中的检索没有结果并且当前逻辑算子为OR,则从存储器管理器60分配一个桶(S470),并且利用散列函数生成散列键(S480),接着将所分配桶连接至对应于该散列键的散列链(S490),并且将输入数据记录在所分配桶中(S500),并接着OR计数器值增加1(S510)。
(5)逻辑改变模块
当逻辑算子改变时使用逻辑改变模块。逻辑改变模块执行改变散列的逻辑状态的功能。如果运算“(A AND B)OR C”呈现在集合A、B以及C上,则逻辑改变模块在执行了AND逻辑运算之后执行将散列的逻辑状态从AND改变成OR的功能。
输入值由逻辑算子和算子数组成。
逻辑算子:AND或OR
算子数:其中AND或OR算子连续出现的数量
参照图6,对利用逻辑改变模块来将AND改变为OR的操作进行描述。
首先,新散列数据结构利用逻辑算子和作为输入值的算子数以及在当前散列数据结构中设置的桶的可预测数PreCount而内部地设置(S600)。在这种情况下,使用上述启动模块。
随后,根据当前散列数据结构仅获取结果值,并且利用下面将描述的下一个(Next)模块将结果值插入到新散列数据结构中,接着将当前散列数据结构中的变量项映射至新散列数据结构的变量项(S610)。
随后,利用清除模块从当前散列数据结构释放存储器资源(S620)。
随后,将内部生成的新散列数据结构的变量项和指针映射至当前散列数据结构(S630),并且仅内部生成的新散列数据结构的对象数据被消除(S640)。在这种情况下,新散列数据结构未被清除。
为了实现逻辑改变模块,存储散列内部的多个项当中的用户输入数据的缓冲区(散列表、桶块)需要利用指针从堆中分配。由此,当前散列数据结构的逻辑状态可以改变成新逻辑状态。
通过执行上述操作,当逻辑算子从AND改变成OR时,分配给散列数据结构的存储器的尺寸可以显著减小。
因为在通过逻辑改变模块执行从OR向AND改变的操作的同时所分配存储器的尺寸未减小,所以简单地改变当前散列数据结构的逻辑状态。在这种情况下,当前散列数据结构的桶改变成用于AND逻辑运算的桶30a。
(6)尺寸模块
参照图7,尺寸模块执行将逻辑运算的结果的数量返回给用户的功能。
不存在输入值。
检查当前逻辑算子是AND还是OR(S700),如果散列数据结构的逻辑状态是AND逻辑状态,则返回AND计数器值(S710),如果散列数据结构的逻辑状态是OR逻辑状态,则返回OR计数器值(S720)。
(7)下一个(Next)模块
参照图8,下一个(Next)模块在执行了逻辑运算之后执行向用户返回逻辑运算的结果的功能。
不存在输入值。
对于下一个(Next)模块的情况来说,在当前逻辑算子的类型为AND时(在当前散列数据结构是在执行了AND逻辑运算之后时),从散列数据结构仅检索具有和AND逻辑算子的数量相同的计数器数的桶,并且设置为最终结果值,从而将放置光标的桶内的用户数据一个接一个地输出。在当前逻辑算子的类型为OR时(在当前散列数据结构是在执行了OR逻辑运算之后时),散列数据结构内的所有有效桶被设置为最终结果值,从而将放置光标的桶内的用户数据一个接一个地输出。下面,对其详细操作进行描述。
检查当前逻辑算子是AND还是OR(S800),如果散列数据结构的逻辑状态是AND逻辑状态,则光标值增加1,并且在光标的位置中获取桶(S810)。
如果所获取桶无效,则散列数据结构内的所有桶块被舍去(rounded),将“没有数据”返回给用户(S820)。
如果所获取桶有效,则桶内的计数器值和算子数彼此进行比较,如果计数器值和算子数相同,则返回桶内的用户数据(S830),而如果计数器值和算子数不同,则该操作返回至操作S810。
如果散列数据结构的逻辑状态是OR逻辑状态,则光标值增加1,并且在光标的位置中获取桶(S840)。
如果所获取桶有效,则返回桶内的用户数据(S850),而如果所获取桶无效,则散列数据结构内的所有桶块被舍去(rounded),并且将“没有数据”返回给用户。
下面,参照下列示例,对根据本发明的、用于利用散列来执行基于全文的逻辑运算的方法进行描述。
假定在图9B和9C中示出与图9A中所示“表A”有关的“名称B+索引”和“区域B+索引”中的每一个。
(示例1)检索包括与“名称”有关的“现代”和“汽车”的记录。
检索查询将按逻辑方式表达如下。
名称(“现代”AND“汽车”)
首先,如图10A中所示,根据索引检索关键字“现代”,以使执行到散列中的插入操作。
接下来,如图10B中所示,根据索引检索关键字“汽车”,以使针对散列执行AND逻辑运算。
接着,图10C中示出了检索的结果。
下面,对示例1的程序代码进行描述:
LogicHash hash;//散列对象
hash.StartUp(LOGIC_AND,1,100);//逻辑算子,算子数,桶的可预测数
hash.Insert({1user data});//插入操作
hash.Insert({2user data});
hash.Insert({4user data});
hash.Logic(1,{1user data});//AND逻辑运算
hash.Logic(1,{4user data});
hash.Logic(1,{5user data});
int size=hash.Size();//获取结果的数量
for(int i=0;i<size;i++){//检查检索的结果
{bucket}=hash.Next();
}
hash.CleanUp();//释放散列资源
(示例2)检索包括与“名称”有关的“现代”或“汽车”的记录。
检索查询将按逻辑方式表达如下。
名称(“现代”OR“汽车”)
首先,如图11A中所示,根据索引检索关键字“现代”,以使执行到散列中的插入操作。
接下来,如图11B中所示,根据索引检索关键字“汽车”,以使针对散列执行OR逻辑运算。
接着,图11C示出了检索的结果。
下面,对示例2的程序代码进行描述:
LogicHash hash;//散列对象
hash.StartUp(LOGIC_OR,1,100);//逻辑算子,算子数,桶的可预测数
hash.Insert({1user data});//插入操作
hash.Insert({2user data});
hash.Insert({4user data});
hash.Logic(1,{1user data});//OR逻辑运算
hash.Logic(1,{4user data});
hash.Logic(1,{5user data});
int size=hash.Size();//获取结果的数量
for(int i=0;i<size;i++){//检查检索的结果
{bucket}=hash.Next();
}
hash.CleanUp();//释放散列资源
(示例3)检索包括与“名称”有关的“现代”和与“区域”有关的“首尔”的记录。
检索查询将按逻辑方式表达如下。
名称(“现代”)AND区域(“汽车”)
首先,如图12A中所示,根据索引检索关键字“现代”,以使执行到散列中的插入操作。
接下来,如图10B中所示,根据索引检索关键字“首尔”,以使针对散列执行AND逻辑运算。
接着,图12C示出了检索的结果。
下面,对示例3的程序代码进行描述:
LogicHash hash;//散列对象
hash.StartUp(LOGIC_AND,1,100);//逻辑算子,算子数,桶的可预测数
hash.Insert({1user data});//插入操作
hash.Insert({2user data});
hash.Insert({4user data});
hash.Logic(1,{1user data});//AND逻辑运算
hash.Logic(1,{2user data});
int size=hash.Size();//获取结果的数量
for(int i=0;i<size;i++){//检查检索的结果
{bucket}=hash.Next();
}
hash.CleanUp();//释放散列资源
(示例4)检索包括与“名称”有关的“现代”、“汽车”以及“洗车处”的记录。
检索查询将按逻辑方式表达如下。
名称(“现代”AND“汽车”AND“洗车处”)
首先,如图13A中所示,根据索引检索关键字“现代”,以使执行到散列中的插入操作。
接下来,如图13B中所示,根据索引检索关键字“汽车”,以使针对散列执行第一AND逻辑运算。
接下来,如图13C中所示,根据索引检索关键字“洗车处”,以使针对散列执行第二AND逻辑运算。
接着,图13D示出了检索的结果。
下面,对示例4的程序代码进行描述:
LogicHash hash;//散列对象
hash.StartUp(LOGIC_AND,2,100);//逻辑算子,算子数,桶的可预测数
hash.Insert({1user data});//插入操作
hash.Insert({2user data});
hash.Insert({4user data});
hash.Logic(1,{1user data});//第一AND逻辑运算
hash.Logic(1,{4user data});
hash.Logic(1,{5user data});
hash.Logic(1,{4user data});//第二AND逻辑运算
int size=hash.Size();//获取结果的数量
for(int i=0;i<size;i++){//检查检索的结果
{bucket}=hash.Next();
}
hash.CleanUp();//释放散列资源
(示例5)检索包括与“名称”有关的“现代”或“天堂”和与“区域”有关的“大田”的记录。
检索查询将按逻辑方式表达如下。
名称(“现代”OR“天堂”)AND区域(“大田”)
首先,如图14A中所示,根据索引检索关键字“现代”,以使执行到散列中的插入操作。
接下来,如图14B中所示,根据索引检索关键字“天堂”,以使针对散列执行OR逻辑运算。
接下来,如图14C中所示,因为逻辑算子从OR改变成AND,所以改变散列数据结构的逻辑状态。
接下来,如图14D中所示,根据索引检索关键字“大田”,以使针对散列执行AND逻辑运算。
接着,图14E示出了检索的结果。
下面,对示例5的程序代码进行描述:
LogicHash hash;//散列对象
hash.StartUp(LOGIC_OR,1,100);//逻辑算子,算子数,桶的可预测数
hash.Insert({1user data});//插入操作
hash.Insert({2user data});
hash.Insert({4user data});
hash.Logic(1,{3user data});//OR逻辑运算
hash.ChangeLogic(LOGIC_AND,1);//改变散列数据结构的逻辑状态
hash.Logic(1,{3user data});//AND逻辑运算
hash.Logic(1,{4user data});
int size=hash.Size();//获取结果的数量
for(int i=0;i<size;i++){//检查检索的结果
{bucket}=hash.Next();
}
hash.CleanUp();//释放散列资源
本发明的实施方式可以被记录在包括个人计算机(PC)的通用计算机中使用的记录介质中。该记录介质的示例包括:磁存储介质(例如,ROM、软盘、硬盘等)、光学记录介质(例如,CD-ROM,或DVD)、电记录介质(例如,闪速存储器、存储器棒等),以及载波(例如,经由因特网传输)。
工业应用性
如上所述,根据本发明的上述实施方式中的一个或更多个,利用散列缩减整个资源,以使可以有效地使用有限的系统资源。内存碎片被抑制,使得可以增加可用系统资源。由此,可以平稳地提供服务,并且还可以获取性能增益。
具体来说,可以增加其中存储器压缩功能比在一般PC中更简单的移动终端上的希望效果。
虽然本发明已经参照其示例性实施方式进行了具体示出和描述,但本领域普通技术人员应当明白,在不脱离如随附权利要求书中所定义的、本发明的精神和范围的情况下,可以在形式和细节上对本发明进行各种改变。

Claims (8)

1.一种用于利用散列来执行基于全文的逻辑运算的方法,该方法包括以下步骤:
(a)生成具有根据逻辑算子的类型改变的逻辑状态的散列数据结构,以对应于第一逻辑算子;
(b)将与第一运算对象数据相对应的散列节点插入到从所述散列数据结构顺序地分配的桶中;以及
(c)如果当前逻辑算子的类型为AND,则选择在步骤(b)中被插入在所述散列数据中的桶或者作为先前运算的结果值而选择的桶当中的、和与第二运算对象数据相对应的散列节点一致的桶,作为结果值,如果当前逻辑算子的类型为OR,则将未从所述散列数据结构检索到的与所述第二运算对象数据相对应的所述散列节点当中的散列节点插入到从所述散列数据结构顺序地分配的所述桶中,并且选择所述散列数据结构内的所有有效桶作为结果值,
所述方法还包括以下步骤:
(d)如果当前逻辑算子不同于所述散列数据结构的逻辑状态,则根据当前逻辑算子改变所述散列数据结构的逻辑状态,
其中,步骤(d)包括:如果所述散列数据结构的逻辑状态从AND改变成OR,则生成新散列数据结构,将与现有散列数据结构的结果值相对应的桶插入到所述新散列数据结构中,释放所述现有散列数据结构的所有资源,并且将所述新散列数据结构映射至所述现有散列数据结构。
2.根据权利要求1所述的方法,其中,所述散列数据结构包括:
散列函数,该散列函数根据其中将散列标识符(ID)用作输入值的MOD运算而生成;
散列表,该散列表是指定与散列键相对应的桶的开始位置的散列节点的列表集;以及
桶块,在该桶块中,每一个桶都包括针对散列链的散列ID和指针。
3.根据权利要求2所述的方法,其中,具有逻辑状态AND的所述散列数据结构的桶还包括用于确定逻辑运算的结果值的计数器。
4.根据权利要求2所述的方法,其中,在步骤(b)或(c)中分配所述桶的步骤包括:从所述散列数据结构顺序地分配预定桶块内的多个桶当中的未使用桶,如果在所述桶块中不存在未使用桶,则生成新桶块并且在所述新桶块内分配未使用桶。
5.根据权利要求2所述的方法,其中,所述桶块的尺寸被确定为2n,其中,n为整数。
6.根据权利要求5所述的方法,其中,所述散列表的尺寸被确定为比所述桶块的尺寸稍大的质数。
7.根据权利要求2所述的方法,其中,所述散列数据结构还包括:
AND计数器,该AND计数器对AND逻辑运算的结果值的数量计数;和
OR计数器,该OR计数器对OR逻辑运算的结果值的数量计数。
8.根据权利要求3所述的方法,所述方法还包括以下步骤:(e)如果当前逻辑算子的类型为AND,则仅输出具有和AND逻辑算子的数量相同的计数器数的桶作为来自所述散列数据结构的最终结果值,如果当前逻辑算子的类型为OR,则输出在所述散列数据结构内的所有有效桶作为最终结果值。
CN201280025701.XA 2012-10-17 2012-10-23 用于利用散列来执行基于全文的逻辑运算的方法 Expired - Fee Related CN103874996B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
KR10-2012-0115454 2012-10-17
KR1020120115454A KR101416586B1 (ko) 2012-10-17 2012-10-17 해쉬를 이용한 전문 기반 논리 연산 수행 방법
PCT/KR2012/008715 WO2014003249A1 (ko) 2012-10-17 2012-10-23 해쉬를 이용한 전문 기반 논리 연산 수행 방법

Publications (2)

Publication Number Publication Date
CN103874996A CN103874996A (zh) 2014-06-18
CN103874996B true CN103874996B (zh) 2017-02-08

Family

ID=49783366

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201280025701.XA Expired - Fee Related CN103874996B (zh) 2012-10-17 2012-10-23 用于利用散列来执行基于全文的逻辑运算的方法

Country Status (5)

Country Link
US (1) US9396223B2 (zh)
JP (1) JP6078652B2 (zh)
KR (1) KR101416586B1 (zh)
CN (1) CN103874996B (zh)
WO (1) WO2014003249A1 (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9405643B2 (en) * 2013-11-26 2016-08-02 Dropbox, Inc. Multi-level lookup architecture to facilitate failure recovery
US10372695B2 (en) * 2014-12-27 2019-08-06 Intel Corporation Technologies for computing rolling hashes
US10496543B2 (en) * 2016-03-31 2019-12-03 Samsung Electronics Co., Ltd. Virtual bucket multiple hash tables for efficient memory in-line deduplication application
US11698929B2 (en) * 2018-11-30 2023-07-11 Intel Corporation Offload of data lookup operations
CN113297224B (zh) * 2021-05-31 2022-06-28 上海艾麒信息科技股份有限公司 一种基于Redis的海量数据分类存储方法及系统

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7043488B1 (en) * 2000-01-21 2006-05-09 International Business Machines Corporation Method and system for storing hierarchical content objects in a data repository
KR20060048778A (ko) * 2004-07-26 2006-05-18 구글, 인코포레이티드 정보 검색 시스템에서의 문구 기반 서치
JP2007328736A (ja) * 2006-06-09 2007-12-20 Mitsubishi Electric Corp リソース検索システム
KR20090108849A (ko) * 2008-04-14 2009-10-19 삼성전자주식회사 파일 저장/검색 장치 및 방법
JP2010050600A (ja) * 2008-08-20 2010-03-04 Fujitsu Ltd 情報検索装置
KR20110077934A (ko) * 2009-12-30 2011-07-07 동국대학교 산학협력단 해싱 기반의 데이터 관리 방법 및 장치
CN102426680A (zh) * 2010-11-01 2012-04-25 微软公司 使用求散列的逻辑帐户表

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2973944B2 (ja) * 1996-06-26 1999-11-08 富士ゼロックス株式会社 文書処理装置および文書処理方法
US6681217B1 (en) * 1998-10-27 2004-01-20 Jerzy Lewak Boolean text search combined with extended regular expression search
US6381594B1 (en) * 1999-07-12 2002-04-30 Yahoo! Inc. System and method for personalized information filtering and alert generation
US7076494B1 (en) * 2000-01-21 2006-07-11 International Business Machines Corporation Providing a functional layer for facilitating creation and manipulation of compilations of content
CA2384185A1 (en) * 2002-04-29 2003-10-29 Ibm Canada Limited-Ibm Canada Limitee Resizable cache sensitive hash table
JP2011215835A (ja) * 2010-03-31 2011-10-27 Toshiba Corp 全文検索機能を備えるストレージ装置
US8904189B1 (en) * 2010-07-15 2014-12-02 The Research Foundation For The State University Of New York System and method for validating program execution at run-time using control flow signatures
JP5524144B2 (ja) * 2011-08-08 2014-06-18 株式会社東芝 key−valueストア方式を有するメモリシステム
JP6011618B2 (ja) * 2012-05-24 2016-10-19 富士通株式会社 検索プログラム、検索方法、検索装置、記憶プログラム、記憶方法及び記憶装置
US9940359B2 (en) * 2014-05-23 2018-04-10 International Business Machines Corporation Data-partitioned secondary index (DPSI) partition level join

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7043488B1 (en) * 2000-01-21 2006-05-09 International Business Machines Corporation Method and system for storing hierarchical content objects in a data repository
KR20060048778A (ko) * 2004-07-26 2006-05-18 구글, 인코포레이티드 정보 검색 시스템에서의 문구 기반 서치
JP2007328736A (ja) * 2006-06-09 2007-12-20 Mitsubishi Electric Corp リソース検索システム
KR20090108849A (ko) * 2008-04-14 2009-10-19 삼성전자주식회사 파일 저장/검색 장치 및 방법
JP2010050600A (ja) * 2008-08-20 2010-03-04 Fujitsu Ltd 情報検索装置
KR20110077934A (ko) * 2009-12-30 2011-07-07 동국대학교 산학협력단 해싱 기반의 데이터 관리 방법 및 장치
CN102426680A (zh) * 2010-11-01 2012-04-25 微软公司 使用求散列的逻辑帐户表

Also Published As

Publication number Publication date
CN103874996A (zh) 2014-06-18
WO2014003249A1 (ko) 2014-01-03
US20150213016A1 (en) 2015-07-30
US9396223B2 (en) 2016-07-19
KR20140049328A (ko) 2014-04-25
JP6078652B2 (ja) 2017-02-08
JP2015532498A (ja) 2015-11-09
KR101416586B1 (ko) 2014-07-08

Similar Documents

Publication Publication Date Title
CN103874996B (zh) 用于利用散列来执行基于全文的逻辑运算的方法
JP6028567B2 (ja) データ格納プログラム、データ検索プログラム、データ格納装置、データ検索装置、データ格納方法及びデータ検索方法
CN105224532B (zh) 数据处理方法及装置
CN106682012A (zh) 商品对象信息搜索方法及装置
CN103353901B (zh) 基于Hadoop分布式文件系统的表数据的有序管理方法以及系统
JP2011090351A (ja) 検索データ管理装置
JP5320204B2 (ja) 情報端末装置、情報検索方法、および情報検索プログラム
CN108062384A (zh) 数据检索的方法和装置
CN106503054A (zh) 一种数据查询方法及服务器
CN108694188A (zh) 一种索引数据更新的方法以及相关装置
KR101243289B1 (ko) 소셜 네트워크 서비스 정보 검색 시스템
KR100899930B1 (ko) 연관 데이터 클래스 생성 방법 및 시스템
CN103473228B (zh) 相关关键词的显示方法及装置
US7987213B2 (en) Storage profile generation for network-connected portable storage devices
CN110019980A (zh) 索引处理方法、装置、存储介质和计算机设备
CN109992708B (zh) 一种元数据查询的方法、装置、设备以及存储介质
JP5907251B2 (ja) データベース管理方法、プログラム、および情報処理装置
JP5761029B2 (ja) 辞書作成装置、単語収集方法、及び、プログラム
CN104504134A (zh) 推广信息属性数据的获取方法和装置
CN109918595B (zh) 获取公共模块的方法和装置
CN110765073A (zh) 分布式存储系统的文件管理方法、介质、设备及装置
CN108241758A (zh) 数据查询方法及相关设备
CN110399337B (zh) 基于数据驱动的文件自动化服务方法和系统
Paixão et al. Clustering large-scale, distributed software component repositories
CN116304117B (zh) 一种获取文本信息的数据处理方法、系统和存储介质

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20170208

Termination date: 20191023