结合搜索引擎和数据库

问题描述

如果我的搜索引擎数据库有很多记录(id和与该id关联的关键字),则在给定输入(关键字列表)时,将输出ID列表和排名

database:
id1     keyword1 keyword2 ... keyword9
id2     keyword4 keyword7 ... keyword10
id3     keyword5 keyword6 ... keyword12
...
id99999 keyword15 keyword6 ... keyword19

input:
keyword8 keyword9

output:
id1      0.994
id2125   0.841
...
id84512  0.342

然后将其显示用户,我们将像这样进行查询

SELECT *
FROM products
WHERE id IN ('id1','id2125',...,'id5127') 
         -- ^ only need to bind first 20 ids
         --   from search engine result
         --   and 21st to 40th ids for next page
         --   and so on

但是,当用户选择显示按最低价格排序时,我们将必须执行以下操作:

SELECT *
FROM products
WHERE id IN (/* a very very long list */)
         -- ^ all the ids from search engine result
ORDER BY current_price
LIMIT 20 OFFSET 0

那可能很慢吧? (例如,如果我们从搜索结果中获得1万个ID,就不会缩放)。

我们可以通过插入到另一个表(例如search_results表)中,然后进行WHERE IN (SELECT)查询来减少参数绑定的长度/传递/传递,这样可以更快地进行查询(因此,使用相同的关键字或下一页进行搜索):

SELECT * 
FROM products
WHERE id IN (SELECT id FROM search_results WHERE search_id = ?)
ORDER BY current_price
LIMIT 20 OFFSET 0

但是与此同时,我们还必须在search_results表中插入大量ID

INSERT INTO search_results(search_id,id) VALUES(...,'id1'),(...,'id2125'),'id2156'),... -- and so on

-- or in Postgresql which support array data type
INSERT INTO search_results(search_id,ids) VALUES(...,{'id1','id2156','id5126'});
-- then the query above would be:
-- WHERE id = ANY(SELECT ids FROM search_results WHERE search_id = ?)

问题:

  1. 有什么更好的方法
  2. 亚马逊或任何其他在线商店中的人如何处理这种情况(他们使用什么搜索引擎和/或数据库组合)或完全使用其他方式?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...