逻辑search字段数据库select问题

这是一个有点复杂但很简单的问题。 我正在创build一个允许在一个对象上存储的小应用程序,该对象有一个标题,描述,标记和子对象。 主题包含评论。 什么是使用search字段来查找这些对象中的任何匹配的理想方式。

例如对象1 {id:1,title:test,description:fun,tags:[{games,toys}]}子对象1 {lid:1,评论:'这很有趣也很快'}

说我search:快乐的乐趣。 或者我search:testing

我想任何这些返回相同的对象。

我知道我将不得不通过空格或逗号分解variables,并创build一个数组,但我应该如何构buildSQL。

我不是要创build一个复杂的页面排名algrothim,如果我必须限制search标题或标签或描述我会这样做。

注意:这是一个简单的应用程序,即时通讯只是寻找select。

最简单的方法是将您的字段组合成一个JSON对象,并将其放在MongoDB或其他JSON数据库中

我知道的最简单的方法是使用PostgreSQL三字节search。 假设你有这样的表格:

CREATE TABLE t (id int NOT NULL PRIMARY KEY, value text); INSERT INTO t VALUES (1, '{id:1, title:test, description:fun, tags:[{games, toys}]} subobject 1 {lid:1, comment:''this is fun and fast''}'); 

你可以用这个准备search:

 CREATE EXTENSION pg_trgm; CREATE INDEX t_trgm ON t USING gin (value gin_trgm_ops); SELECT set_limit(0.05); 

您只需要为每个数据库安装一次扩展。 您可以使用GiST或GIN索引; 只需使用相应的操作设置。 GiST通常更新更快; GIN通常search速度更快 – 所以最好的select取决于工作量。 我将连接的相似性限制设置为5%,因为您似乎对string的小部分匹配感到满意。 根据需要调整。 请记住,此限制是基于会话的,因此在使用%运算符之前,需要在连接上进行设置。

完成这个设置后,这里是search:

 SELECT * FROM t WHERE value % 'test'; SELECT * FROM t WHERE value % 'fun fast'; 

这并不太简单。

虽然在表格中只有一行的时候,甚至可能不会使用索引,但是在我们的生产数据库中发现有数百万行要search,相似性search通常会在几十毫秒内运行。

http://www.postgresql.org/docs/current/interactive/pgtrgm.html