有关如何搜索和返回字符串的建议

时间:2015-07-20 16:43:36

标签: string mongodb search indexing

原谅我,这将是我的第一篇文章,所以请告诉我如何改进。

我正在寻找有关我所面临问题的建议。我有一个包含十亿个独特文本字符串的列表。这些文本字符串还有一个与它们关联的标记列表,用于指示字符串的内容。

示例:

StringText: The cat ate on Sunday
AnimalCode: c001
ActionCode: a001
TimeCode:   d001

其中

c001 = The cat
a001= ate
d001 = on Sunday

我已将所有字符串及其代码作为MongoDB实例中的单个文档加载

目前,我正在尝试设计一种方法,通过该方法我可以输入字符串并搜索数据库以返回匹配项。我的问题是搜索结果需要很长时间才能返回结果。

我在StringText字段上创建了一个索引,但我猜测它太大而无法保存在内存中。

每个字符串具有相同的搜索概率,因此我无法可靠地预测哪些字符串被搜索的概率更高,并将其拉出到另一个集合中。

目前,我正在使用16GB内存和4TB硬盘的单个机箱运行数据库。

有没有人对如何更有效地完成任务有任何建议? Mongo是正确的技术还是其他人更善于进行这种搜索和返回?

我的目标(如果愚蠢的话,原谅我)会尝试在2秒或更短的时间内返回结果。

我对整个竞技场都很陌生,所以欢迎任何建议。

非常感谢所有人提前获得帮助和时间。

此致 锌加

1 个答案:

答案 0 :(得分:1)

正如评论中所讨论的,您可以预处理输入字符串以查找关联的动物和动作代码,并根据索引代码搜索StringText,这比文本搜索快得多。

您无法完全避免文本搜索,因此请通过标记输入字符串将其缩减为Animal和/或Action集合。了解如何仅针对此类查询使用map/reduce技术。

在您的情况下,如果您知道第一个或第二个字总是包含动物的名字,只需使用这一个或两个词来搜索相关动物。搜索动物/动作集合不应该花费很长时间。如果是这样,您可以定期更新最常见的动物/动作列表(基于它们的频率)并搜索它以使其更快。这也在链接页面上的文章中讨论。

如果在此之后您对StringText的搜索速度很慢,您可以按动物/动作代码对StringText集合进行分片。 official doc应该足够了,并且设置中没有太多内容,所以无论如何你都可以试试这个。 各地的基本意识形态都是尽可能地限制你的目标空间。为每个查询搜索十亿条记录显然有点过分。尽可能缓存,预处理,在运行慢查询时显示猜测。

祝你好运!