key/data pair与索引文件

<!-- /* Font Definitions */ @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"/@宋体"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋体; mso-font-kerning:1.0pt;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:612.0pt 792.0pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.Section1 {page:Section1;} -->

前段时间浏览 swish 2.6 版本的代码,其中的索引存储采用了 Berkeley DB ,直接通过 key data pair 方式进行存储( Berkeley DB 本身就是轻量级的,通过 key-data pair 进行数据的存储)。

Swish 2.6 中对于 ENTRY 词条的存储基于 key/data pair 方法。词条的 word 作为 key ,位置信息等作为 data ,通过数据库的方式进行存储。

 

例如:对于词条 china ,出现在 filenum1 的标题中和 filenum2 中的文章内容中。此时,可以将词条作为 key ,位置等信息作为 data ,数据设计为:

<metaID><datasize>< 所在文件 ><position><metaID><datasize>< 所在文件 ><position>

其中, metaID 相当与 lucene 中的 field 域。

在查询的时候,通过 key china )获得 data ,直接分析其中的位置信息即可。但是 key/pair 存储仅支持完全匹配查询。(当然,可以增加一个查询处理层,对于通配符查询等进行处理)。

swish2.4 原先的索引文件设计中,将词条 ENTRY 通过 hash 方法映射到 hash 表中,然后直接按照 binary file 的方式写入文件。应该说,效率方面比不了 key/pair 访问方式。

 

打算在桌面搜索的程序中,用 kerkeley DB 进行处理。

你可能感兴趣的:(key/data pair与索引文件)