在Rails / Postgresql中进行精确文本匹配的最佳方法

时间:2019-04-24 15:31:47

标签: ruby-on-rails postgresql activerecord

我在postgresql表中有一个文本列,我需要经常和非常快速地寻找精确匹配。这是英文或中文的文本列,其长度通常为短句或段落。

我最好的选择是什么?一个“哪里”查询?我将如何为该列编制索引?

编辑: 我的数据库迁移导致错误:

execute "CREATE INDEX idx_src ON translate_logs USING btree (src);"

Caused by:
PG::ProgramLimitExceeded: ERROR:  index row size 2936 exceeds maximum 2712 for index "idx_src"
HINT:  Values larger than 1/3 of a buffer page cannot be indexed.
Consider a function index of an MD5 hash of the value, or use full text indexing.

1 个答案:

答案 0 :(得分:0)

不确定这是最好的答案,而是回答我到目前为止的内容:

我创建了一个迁移,该迁移的MD5哈希值索引为:

execute "CREATE INDEX idx_src ON translate_logs ((md5(src)));"

这是我在列中搜索完全匹配的方式。

TranslateLog.where('md5(src) = md5(?)', text)

很高兴听到更好的答案