performance - 在 Postgres 或 CouchDB 中进行全文搜索?

标签 performance postgresql indexing full-text-search couchdb

我获取了 geonames.org 并导入了他们所有德国城市和所有地区的数据。

如果我输入“Hamburg”,它会列出“Hamburg Center, Hamburg Airport”等等。该应用程序位于无法访问 Internet 的封闭网络中,因此我无法访问 geonames.org Web 服务并且必须导入数据。 :( 这座城市及其所有地区都是自动完成的。因此,每次按键命中都会产生 XHR 请求等。

现在我的客户问是否可以把世界上所有的数据都放在里面。最后,大约 5.000.000 行和 45.000.000 个替代名称等。

Postgres 每次查询需要大约 3 秒,这使得自动完成无法使用。

现在我想到了 CouchDb,已经用过它了。我的问题:

我想发布“Ham”并且我希望 CouchDB 获取所有以“Ham”开头的文档。如果我输入“Hamburg”,我希望它返回 Hamburg 等等。

CouchDB 是适合它的数据库吗?您可以推荐哪些其他数据库以低延迟(可能在内存中)和数百万数据集响应?数据集不会定期更改,而是静态的!

最佳答案

如果我对您的问题的理解正确,那么您可能需要的一切都已内置在 CouchDB 中。

  1. 获取名称以例如开头的一系列文档“火腿”。您可以使用 request with a string range : startkey="Ham"&endkey="Ham\ufff0"
  2. 如果您需要更全面的搜索,您可以创建一个包含其他地点名称作为键的 View 。因此,您可以再次使用上述技术查询范围。

下面是一个 View 函数:

function(doc) {
    for (var name in doc.places) {
        emit(name, doc._id);
    }
}

另请参阅有关 CouchDB typeahead and autocomplete search 的 CouchOne 博客文章以及关于 CouchDB autocomplete 的邮件列表讨论.

关于performance - 在 Postgres 或 CouchDB 中进行全文搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5285787/

相关文章:

在 Windows 平台上创建 PostgreSQL C 扩展

android - View 在模拟器和设备上呈现得非常慢

java - BufferedWriter 的 write(String S) 方法实际上是缓冲的吗?

java - 当用户连接超过5000时Jboss停止工作

sql - 选择组上每个组的最大记录

javascript - html 中元素的最快搜索

javascript - 在 JavaScript 中解析 CSS 颜色的最有效方法是什么?

postgresql - 在其他语言的 PostgreSQL 9.1 中自定义全文文本搜索

php - 打破 Wordpress post 循环并继续它

mysql - MySQL同时添加多个索引