我想知道 Postgresql 是否可以处理以下用例?
我们有一个应用程序可以抓取来自不同平台的广告。用户可以使用关键字和其他过滤器属性(价格、位置等)添加搜索。当我们收到新广告时,我们希望找到与广告详细信息匹配的所有搜索。
每次收到广告时,我都需要检查这些查询(搜索)中的哪一个与广告对象匹配。
这基本上是一个反向搜索。
更新
例子:
我有这个searches table:
+----+-------------------+------------+----------+
| Id | keyword | startPrice | endPrice |
+----+-------------------+------------+----------+
| 1 | iphone 8 plus | 100 | 300 |
+----+-------------------+------------+----------+
| 2 | Ipohne 7 | 50 | 500 |
+----+-------------------+------------+----------+
| 3 | iphone 8 | 200 | 300 |
+----+-------------------+------------+----------+
| 4 | headphones iphone | 10 | 300 |
+----+-------------------+------------+----------+
现在我有advert以下结构的对象:
{
title: Sell Iphone 8 plus 32GB, white,
price: 250
}
我想对searches表进行查询,以查找映射到此广告的所有搜索。在我的例子我希望只返回的搜索1 and 3,因为250价格之间startPrice,并endPrice和他们keyword是advert.title:销售iPhone 8 加32GB,白色
即使 advert.title 包含这个iphone词,我也不希望收到带有 ID 的搜索2 and 4,因为它们keywords不完全匹配(advert.title不包含7和耳机)
Elasticsearch 具有Percolate Query,它使您能够存储查询并为集合中的每个元素运行该查询。
如果要匹配特定字符串中的所有关键字,可以使用PostgreSQL 全文搜索功能,如下所示:
SELECT id, keyword, startPrice, endPrice
FROM searches
WHERE
startPrice <= 250
AND endPrice >= 250
AND to_tsvector('Sell Iphone 8 plus 32GB, white') @@ to_tsquery(array_to_string(string_to_array(keyword, ' '), ' & '));
Run Code Online (Sandbox Code Playgroud)
结果如下:
id | keyword | startprice | endprice
----+---------------+------------+----------
1 | iphone 8 plus | 100 | 300
3 | iphone 8 | 200 | 300
Run Code Online (Sandbox Code Playgroud)
此查询将匹配包含所有关键字的任何字符串。请注意确保关键字不能包含任何包含匹配符号的字符(例如!、&、| 等)。
| 归档时间: |
|
| 查看次数: |
606 次 |
| 最近记录: |