3

目前正在从事一个以称为 SNOMED 的医学命名法为中心的项目。snomed 的核心是三个关系数据集,它们的长度分别为 350,000、110 万和 130 万条记录。我们希望能够快速查询此数据集以获取我们希望具有某种形状或形式的自动完成/建议的数据输入部分。

它目前位于 MySQL MyISAM DB 中,仅用于开发目的,但我们想开始使用一些内存选项。目前包括索引在内的大小为 30MB + 90MB + 70MB。MEMORY MySQL 引擎和 MemCached 是显而易见的,所以我的问题是您会建议其中哪一个,或者那里有更好的东西?

如果这有所作为,我们主要在应用程序级别使用 Python。此外,我们正在一台小型专用服务器上运行,很快就会迁移到 4GB DDR2。

编辑:附加信息

我们有兴趣保持快速的建议和自动完成。对这些类型的查询来说表现良好的东西是可取的。snomed 中的每个术语通常都有几个同义词、缩写和首选名称。我们将大量查询该数据集(包括索引在内的大小为 90MB)。我们还在考虑建立一个倒排索引以加快速度并返回更多相关结果(许多术语很长“整个基底蜕膜的盘绕动脉(身体结构)”)。Lucene 或其他一些全文搜索可能是合适的。

4

2 回答 2

2

从您的用例来看,听起来您想要进行全文搜索;我会建议狮身人面像。它的速度非常快,即使在大型数据集上也是如此。如果您需要额外的速度,您可以集成 memcached。

于 2009-07-08T18:31:04.210 回答
1

请参见

有关如何使用 Lucene 执行此操作。Lucene 是最接近行业标准的全文搜索库。它速度快,并提供高质量的结果。然而,掌握 Lucene 需要时间——你必须处理许多底层细节。更简单的方法可能是使用Solr,这是一个 Lucene 子项目,它更容易设置,并且可以提供 JSON 输出,可用于自动完成

As Todd said, you can also use Sphinx. I have never used it, but heard it is highly integrable with MySQL. I failed to find how to implement autocomplete using Sphinx - maybe you should post this as a separate question.

于 2009-07-09T06:22:02.817 回答