加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

如何创建sql查询以搜索部分匹配?

发布时间:2020-12-12 07:48:14 所属栏目:MsSql教程 来源:网络整理
导读:我在db中有一组项目.每个项目都有一个名称和一个描述.我需要实现一个搜索工具,它接受一些关键字并返回至少有一个关键字与名称中的单词匹配的不同项目或描述. 例如 我在db中有三个项目 1.item1 : name : magic marker description: a writing device which mak
我在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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读