当前位置: 首页 > 面试题库 >

使用PostgreSQL找到流行的字符串

韩楷
2023-03-14
问题内容

我在PostgreSQL表中有一堆文本行,我正在尝试查找常见的字符串。

例如,假设我有一个基本表,例如:

CREATE TABLE a (id serial, value text);
INSERT INTO a (value) VALUES
    ('I go to the movie theater'), 
    ('New movie theater releases'), 
    ('Coming out this week at your local movie theater'),
    ('New exposition about learning disabilities at the children museum'),
    ('The genius found in learning disabilities')
;

我正在尝试在所有行中movie theater以及learning disabilities所有行中找到流行的字符串(目标是显示“趋势”字符串之类的列表,例如Twitter“趋势”之王)

我使用全文搜索,并且尝试ts_stat结合使用,ts_headline但是结果令人失望。

有什么想法吗?谢谢!


问题答案:

没有现成的Posgres文本搜索功能可以找到最受欢迎的短语。对于两个单词的短语,您可以ts_stat()用来查找最流行的单词,消除质点,介词等,并将这些单词交叉连接以查找最流行的单词对。

对于实际数据,您需要更改标记为--> parameter.的值。对于较大的数据集,查询可能会非常昂贵。

with popular_words as (
    select word
    from ts_stat('select value::tsvector from a')
    where nentry > 1                                --> parameter
    and not word in ('to', 'the', 'at', 'in', 'a')  --> parameter
)
select concat_ws(' ', a1.word, a2.word) phrase, count(*) 
from popular_words as a1
cross join popular_words as a2
cross join a
where value ilike format('%%%s %s%%', a1.word, a2.word)
group by 1
having count(*) > 1                                 --> parameter
order by 2 desc;


        phrase         | count 
-----------------------+-------
 movie theater         |     3
 learning disabilities |     2
(2 rows)


 类似资料:
  • 问题内容: 假设我在PostgreSQL中有一个表,如何找到系统使用的确切字节大小以保存表的特定行? 例如,假设我有一个带有字段的表,并且某些行包含用于该字段的很大的字符串,而另一些则很小。在这种情况下,如何检查行的字节大小?(即使在使用TOAST的情况下,也包括字节大小)。 问题答案: 使用和。

  • 主要内容:字符输入流,字符输出流,字符文件输入流,字符文件输出流,字符缓冲区输入流,字符缓冲区输出流尽管 Java 中字节流的功能十分强大,几乎可以直接或间接地处理任何类型的输入/输出操作,但利用它却不能直接操作 16 位的 Unicode 字符。这就要用到字符流。本节将重点介绍字符流的操作。 字符输入流 Reader 类是所有字符流输入类的父类,该类定义了许多方法,这些方法对所有子类都是有效的。 Reader 类的常用子类如下。 CharArrayReader 类:将字符数组转换为字符输入流,

  • 我们有一个包含以下各栏的照片表: 此表包含组合的重复值。因此,一行可能会出现多次。 删除这些重复的最好方法是什么?(我用的是PostgreSQL 9.2和Rails 3。)

  • 以下是尝试用流查找Max的推荐方法吗? 它会导致编译错误-这是什么意思?

  • 问题内容: 我正在尝试查找字符串中字母的首次出现。例如,苹果中的p应该返回1。这是我拥有的: 它似乎似乎没有返回正确的值。 问题答案: 您的尝试很好,但是还不够。这是基于您的正确实现: 您的尝试存在两个问题: 在这一部分中,您已经找到了角色,因此正确的做法是停止递归,但您仍在继续。 在最后一个return语句中,您需要在递归调用中加1(如果最终找到了该字符),作为累加总索引号的一种方式。

  • 我使用Django 3.08和PostgreSQL 12远程服务器。我已经搜索了Postgres和Django的文档,但是找不到关于Django如何/是否加密我的应用程序和数据库之间的流量的讨论。 在我看来,根据PostgreSQL中的设置,PostgreSQL中默认情况下使用md5加密对流量进行加密,并通过端口5432通过tcp发送流量。我的理解是,md5不再足以加密。然而,PostgreSQL