我在db中有一组项目.每个项目都有一个名称和一个描述.我需要实现一个搜索工具,它接受一些关键字并返回至少有一个关键字与名称中的单词匹配的不同项目或描述.
例如
我在db中有三个项目
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
使用关键字“书写”的搜索应该返回魔术标记和XPigment Liner
使用关键字’mall’进行搜索应返回第二项
我尝试分别使用LIKE关键字和IN关键字,..
要使IN关键字起作用,查询必须是
SELECT DISTINCT FROM mytable WHERE name IN ('pall mall cigarettes')
但
SELECT DISTINCT FROM mytable WHERE name IN ('mall')
将返回0行
我无法弄清楚如何使查询适应名称和描述列,并允许部分单词匹配..
有人可以帮忙吗?
更新:
我通过hibernate创建了表,并且对于description字段,使用了javax.persistence @Lob annotation.Using psql,当我检查表时,它显示了
... 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%'
如果您有多个关键字,请使用OR.