【问题标题】:trigram similarity in postgresqlpostgresql中的三元相似度
【发布时间】:2020-10-30 15:58:30
【问题描述】:

我有一个包含两列的表格,即 doc-id 和 doc-txt。 doc-txt 中的每个单元格包含一个文档的全文(大约 1000 个单词),并且 100k 文档在一个表中(100k 行)。 我有一个关键字列表,我想在 doc-txt 中找到与每个关键字最相似的单词。 PostgreSQL 中的有效方法是什么?

【问题讨论】:

  • 这是一种特殊的人类语言吗? “最相似的词”是一个非常奇怪的要求。如果您有 1 亿个单词,那么与关键字最相似的单词通常就是关键字本身。

标签: sql postgresql trigram


【解决方案1】:

您将在列上创建一个 GiST 索引:

CREATE EXTENSION IF NOT EXISTS pg_trgm;

CREATE INDEX ON atable USING gist (doc_txt gist_trgm_ops);

现在您可以像这样执行相似性搜索:

SELECT * FROM atable
ORDER BY doc_txt <<<-> 'keyword' DESC
LIMIT 10;

这将找到 10 个最佳匹配,并且可以由索引支持。

&lt;&lt;&lt;-&gt;运算符对应strict_word_similarity,根据the documentation

strict_word_similarity 函数用于查找整个单词的相似度,而word_similarity 更适合查找部分单词的相似度。

【讨论】:

  • doc-txt 的每个单元格都包含一个大约 1000 个单词的列表(每个 doc 都被标记为单词列表),我想从这 1000 个单词中找到最相似的单词和一个特定的关键字.
  • 然后使用不同的数据模型,其中每个单词都是它自己的列。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-25
  • 1970-01-01
  • 2014-02-25
相关资源
最近更新 更多