如何创建用于搜索部分匹配的sql查询?

如何创建用于搜索部分匹配的sql查询?,sql,keyword,Sql,Keyword,我在数据库中有一组项。每个项都有一个名称和一个描述。我需要实现一个搜索功能,该功能接受许多关键字并返回不同的项,其中至少有一个关键字与名称或描述中的一个单词匹配 比如说 数据库中有三项 1.item1 : name : magic marker description: a writing device which makes erasable marks on whiteboard 2.item2: name: pall mall cigarettes

我在数据库中有一组项。每个
都有一个
名称和一个描述
。我需要实现一个
搜索
功能,该功能接受许多关键字并返回不同的项,其中至少有一个关键字与名称
描述中的一个单词匹配

比如说 数据库中有三项

1.item1 : 
    name : magic marker
    description: a writing device which makes erasable marks    on whiteboard

2.item2:
    name: pall mall cigarettes
    description: cigarette named after a street in london

3.item3:
    name: XPigment Liner
    description: for writing and drawing
使用关键字“writing”的搜索应返回magic marker和XPigment Liner

使用关键字“mall”的搜索应返回第二项

我试着分别使用
LIKE
关键字和
IN
关键字,。。 要使
关键字中的
起作用,查询必须是

SELECT DISTINCT FROM mytable WHERE name IN ('pall mall cigarettes')
但是

将返回0行

我不知道如何创建一个既包含name列又包含description列并允许部分单词匹配的查询

有人能帮忙吗

更新:

我通过hibernate创建了这个表,在description字段中使用了javax.persistence@Lob注释

...
 id           | bigint                      | not null
 description  | text                        |  
 name         | character varying(255)      | 
...
表中的一条记录如下:

id | description | name 
21 | 133414      | magic marker

首先,这种方法不会大规模扩展,您需要一个从单词到项目的单独索引(如反向索引)

如果您的数据不大,您可以这样做

SELECT DISTINCT(name) FROM mytable WHERE name LIKE '%mall%' OR description LIKE '%mall%'
如果您有多个关键字,请使用

这也可以

SELECT * 
FROM myTable
WHERE CHARINDEX('mall', name) > 0
  OR CHARINDEX('mall', description) > 0

您需要
从中选择不同的名称…
您还应该注意区分大小写。在db中,我将描述存储为javax.persistence.Lob类型。因此,db(postgres)表有一个数字(133414等)作为字段内容..“像“%something%”这样的描述无法返回匹配项..知道如何处理吗?您需要使用LIKE而不是IN。IN用于从集合中查找值。LIKE应该用于部分字符串比较。首先,您需要找出文本描述存储在哪个表中。有没有办法找到它?我使用的是postgres..使用/d命令找不到太多
SELECT * 
FROM myTable
WHERE CHARINDEX('mall', name) > 0
  OR CHARINDEX('mall', description) > 0