相关疑难解决方法(0)

更喜欢vs iLIKE

以下两个查询组件的性能如何比较?

更喜欢

... LOWER(description) LIKE '%abcde%' ...
Run Code Online (Sandbox Code Playgroud)

我喜欢

... description iLIKE '%abcde%' ...
Run Code Online (Sandbox Code Playgroud)

postgresql performance pattern-matching database-performance

32
推荐指数
2
解决办法
5万
查看次数

快速找到与PostgreSQL相似的字符串

我需要在表中创建类似字符串的排名.

我有下表

create table names (
name character varying(255)
);
Run Code Online (Sandbox Code Playgroud)

目前,我正在使用提供该功能的pg_trgm模块similarity,但我遇到了效率问题.我创建了一个像Postgres手册建议的索引:

CREATE INDEX trgm_idx ON names USING gist (name gist_trgm_ops);
Run Code Online (Sandbox Code Playgroud)

我正在执行以下查询:

select (similarity(n1.name, n2.name)) as sim, n1.name, n2.name
from names n1, names n2
where n1.name != n2.name and similarity(n1.name, n2.name) > .8
order by sim desc;
Run Code Online (Sandbox Code Playgroud)

查询有效,但是当你有数百个名字时,它确实很慢.此外,也许我忘了一点SQL,但我不明白为什么我不能使用条件and sim > .8没有得到"列sim不存在"错误.

我想要任何提示使查询更快.

sql postgresql text similarity postgresql-performance

26
推荐指数
1
解决办法
3万
查看次数

SQLite3"LIKE"或PostgreSQL"ILIKE"的通用Ruby解决方案?

我使用SQLite3进行开发,使用PostgreSQL进行部署.但是,我面临以下问题:

我的简单搜索使用SQLite3:

def self.search(search)
    if search
      find(:all, :conditions => ["style LIKE ? OR construction LIKE ?", "%#{search}%", "%#{search}%"])
    else
      find(:all)
    end
end
Run Code Online (Sandbox Code Playgroud)

但是,它不起作用PostgreSQL,我需要替换LIKEfor ILIKE来解决问题:

def self.search(search)
    if search
      find(:all, :conditions => ["style ILIKE ? OR construction ILIKE ?", "%#{search}%", "%#{search}%"])
    else
      find(:all)
    end
end
Run Code Online (Sandbox Code Playgroud)

是否有"Ruby方式"在任何数据库中进行这些搜索?

编辑 - 基于您的答案我不相信我会找到一个通用的Ruby解决方案.

我也跟着Ruby on Rails的教程:学习的榜样导轨-由迈克尔·哈特尔,在最终的Gemfile显示这两个数据库...嗯,令人失望...

sqlite postgresql search ruby-on-rails pattern-matching

17
推荐指数
3
解决办法
7398
查看次数

CouchDB中的全文搜索

我有一个问题,希望得到你的回答:-)

因此,我使用geonames.org并将所有德国城市的数据导入所有地区.

如果我进入"汉堡",它会列出"汉堡中心,汉堡机场"等.该应用程序位于一个无法访问互联网的封闭网络中,因此我无法访问geonames.org Web服务并且必须导入数据.:(所有区域的城市都是自动完成的.所以每次击中都会导致XHR请求等等.

现在我的客户询问是否可以获得世界上的所有数据.最后,大约5.000.000行,有45.000.000个替代名称等.

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

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

我想发布"Ham",我希望CouchDB获取所有以"Ham"开头的文档.如果我进入"汉堡",我希望它能够返回汉堡,等等.

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

postgresql indexing performance full-text-search couchdb

14
推荐指数
3
解决办法
1万
查看次数

Postgresql:两列之间的匹配模式

我有两栏说MainSub。(它们可以在同一张桌子上,也可以不在同一张桌子上)。

Main是长度为20 Sub的varchar,长度为8的varchar。始终
Sub是的子集,并且是的后8个字符。MainMain

我可以成功设计一个查询来匹配使用模式 substr("Main",13,8)

查询:

select * from "MainTable"
 where substr("MainColumn",13,8) LIKE (
   select "SubColumn" From "SubTable" Where "SubId"=1043);
Run Code Online (Sandbox Code Playgroud)

但我想在查询中使用Like,%,_等,以便可以轻松地匹配模式(不是全部8个字符)。

问题是我该怎么做?!

我知道下面的查询是完全错误的,但是我想实现这样的目标,

Select * from "MainTable"
 Where "MainColumn" Like '%' Select "SubColumn" From "SubTable" Where "SubId"=2'
Run Code Online (Sandbox Code Playgroud)

postgresql pattern-matching

4
推荐指数
1
解决办法
8346
查看次数