首页新闻找找看学习计划

asp.net高级搜索功能

0
悬赏园豆:50 [待解决问题]

举个例子
GB 123是本库真实数据,客户就想输入GB123,但在普通的搜索功能中写入sql语句是like%'条件'%,搜索不出来想要的,有没有代码可以实现拆分组合拼接,类似于百度搜索中我输入一段文字,文字可以提取出组合词,然后组合词在模糊搜索。

问题补充:

字母加数字,有写数据是有/-这种标识。
AQ 3009-2007
AQ 8003-2007
CB/T 13-2007
CB/T 3000-2007
CB/T 3908-2007
CB/T 3990-2007
DA/T 35-2007
GA 602-2006
GA 653-2006
GA/T 755-2008
GA/T 759-2008
GB 123-2019
GB 15629.1101-2006
GB 15629.1103-2006
GB 15629.1104-2006
GB 15629.11-2003/XG 1-2006
GB 19212.21-2007
GB 21139-2007
GB 21520-2008
GB 50026-2007
GB 50217-2007
GB/T 10802-2006
GB/T 10947-2006
GB/T 10948-2006
GB/T 10953-2006
GB/T 10954-2006
GB/T 11026.3-2006
GB/T 1124.1-2007
GB/T 1124.2-2007
GB/T 11253-2007
GB/T 1127-2007
GB/T 11313.2-2007
GB/T 11313.4-2007
GB/T 1171-2006
GB/T 1221-2007
GB/T 1222-2007
GB/T 12228-2006
GB/T 12233-2006
GB/T 12244-2006
GB/T 12245-2006
GB/T 12246-2006

这些是部分数据
select * from StdCata where bzbh like '%GB123%' or bzbh like '%GB12%' OR bzbh LIKE '%3%' OR bzbh like '%GB1%' OR bzbh LIKE '%23%' OR bzbh LIKE '%GB%' OR bzbh LIKE '%123%' OR bzbh LIKE '%G%' OR bzbh LIKE '%B123%'
这是我想到的语句,现在就是排序问题,最匹配的放在第一位,其中最匹配的是GB 123这条数据,然后其次匹配最多的依次排序

小阿雄的主页 小阿雄 | 初学一级 | 园豆:108
提问于:2019-04-17 16:24
< >
分享
所有回答(4)
0

这种情况,你简单粗暴的用like很难实现,建议去搜索一下 相似度算法,那才是王道

三人乐乐 | 园豆:3150 (老鸟四级) | 2019-04-17 17:22
0

可以的,使用【盘古分词】就是这种效果,比如GB 123就可以根据你自己定义的分词,然后添加到数据库即可:G、B、GB、123、GB 123、1、2、3,然后根据你需要的可以智能分词或者权重来进行组合,到数据库后就是
select * from table where 字段 like ‘%G%’
union
select * from table where 字段 like ‘%B%’
union
select * from table where 字段 like ‘%GB%’
即可

熊泽-学习中的苦与乐 | 园豆:292 (菜鸟二级) | 2019-04-18 09:06

这种可以,出来匹配度进行排序,这一步应该怎么实现,

支持(0) 反对(0) 小阿雄 | 园豆:108 (初学一级) | 2019-04-18 14:27

@小阿雄: 看你怎么匹配了,比如数据库进行排序,按照你想要的排序效果进行排序,比如like‘%字段长度%’,也可以智能排序,不同的规则有不同的方法

0

可以借鉴下jieba分词 有.net版本的 通过Nuget安装即可

.NET_海 | 园豆:480 (菜鸟二级) | 2019-04-18 09:50

这个挺好,类似于分装好的词典调用,但是总归完了之后需要进行拿到真实数据,拿到真实数据的时候匹配度进行排序,有这方面的见解吗

支持(0) 反对(0) 小阿雄 | 园豆:108 (初学一级) | 2019-04-18 14:35
0

自己解决啦

小阿雄 | 园豆:108 (初学一级) | 2019-06-20 15:32
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册