我有一个 PostgreSQL 数据库,其中包含从网络上解析的新闻文章。解析器每小时运行一次,收集新的新闻并将它们存储在数据库中。该应用程序的用户可以将某些关键字添加到他们的个人资料中,这样如果发现包含该关键字的新新闻项目,他们就会收到通知。目前我正在为此使用 SQL 查询,所以每当我收到一篇新的新闻文章时,我都会尝试将其与用户添加的所有关键字进行匹配,然后发出通知,但这需要很多时间。所以我正在考虑整合 Elasticsearch。我遇到了percolation query,但我找不到一个好的文档,所以不确定我是否能够用它创建复杂的查询。搜索需要考虑以下几点:
- 用户可以添加关键字AND、OR、NOT,我们需要分别“搜索所有”、“任何一个”、“不包含”。例如,用户可以给出诸如“比特币”和“加密货币”之类的关键字而不是“采矿”,那么在这种情况下,这个搜索查询应该只匹配包含“比特币”和“加密货币”字样的新闻文章,并且不应该包含“采矿”字样。关键字可以在文章标题或文章正文中的任何位置
- 词干。因此,如果用户关键字包含“raining”并且文章包含单词“rain”,那么渗透搜索仍应返回该关键字的 id
- 用户还可以提供作者作为关键字,在这种情况下,我们需要返回由该作者撰写的文章