用于搜索的索引文件很大

Posted

技术标签:

【中文标题】用于搜索的索引文件很大【英文标题】:Index file for searching is large 【发布时间】:2020-06-07 20:54:21 【问题描述】:

我在 python 中编写了一个算法,用于索引大约 500 个文本文件(有些大于 2 MB)中的每个单词,以便在我的应用程序的搜索引擎中使用。索引文件是基于 json 的,即 key:value 结构。索引的数据是:文件ID、段落ID和行号。这是为每个单词完成的。相似词组合在一起。

问题是索引文件变得相对较大(超过行数据的两倍),这会增加我的应用程序的大小。该应用程序在没有互联网的情况下使用,因此必须在其中发送索引文件。

这是我第一次搞砸这样的事情,所以我想知道是否有办法减少大小,例如,使用 json 以外的其他数据库结构、放置索引文件的最佳格式或其他任何东西。

提前致谢。

【问题讨论】:

你可以看看我的建议 段落 ID 似乎是多余的。可以从文件 ID 和行号推断出来。另外,您是否使用该应用传送原始数据? @user58697 这是一个诗歌应用程序,我指的是诗歌段落。它应该被编入索引。 【参考方案1】:

您的 JSON 结构是一个不错的选择,但为了不让您的应用程序变大,您可以使用分布式系统进行索引。

我的意思是您可以创建多个索引文件而不是一个,并且您可以编写一种算法以分布式方式在它们中搜索

关于大小问题,你可以压缩它们,每个索引文件解压缩只用于搜索


例子:

索引文件:f1、f2、f3

它们将被压缩并存储在您的应用程序中,您可以在这里搜索:

for f in f1 , f2 , f3 :
    index_file = decompress(f)
    # search within index_file

【讨论】:

分布式系统是什么意思? @Ali_Habeeb 它是一个与位于不同计算机或网络(或同一台计算机中的不同节点)中的组件一起使用的系统,在您的情况下,它是同一台计算机中的分布式算法,我建议您下面的解决方案,因为我会更好地压缩许多 1 MB 的文件而不是一个 2 MB 或更多的文件(它会让你减少更多的内存) 我会试一试的。 @Ali_Habeeb 祝你好运【参考方案2】:

你应该检查这个模块:https://docs.python.org/3/library/pickle.html?highlight=pickle#module-pickle

【讨论】:

它说它不是人类可读的,它是 python 特定的。我的应用程序是用 Swift 语言编写的。 JSON 是人类可读的。

以上是关于用于搜索的索引文件很大的主要内容,如果未能解决你的问题,请参考以下文章

索引(用于搜索索引)70,000 个节点的最简单方法是啥?

lucene学习笔记一:lucene是什么实现步骤以及索引的创建查询修改删除

Jackrabbit Oak Lucine 索引和 SQL2 查询,用于在 txt 和 pdf 中进行全文搜索

mysql的索引

MySQL中的索引

MySql中的索引