SSH:利用Struts2+Hibernate4+Spring4+SQLServer框架,搭建一个前后端web网站(5)

释放双眼,带上耳机,听听看~!

利用标签和关键字全栈搜索


  • 实现效果1:当点击标签之后跳转搜索

网站一共有3个主要模块,乡村介绍模块,用户旅游见闻介绍模块,还有用户讨论模块 ,当点击标签的时候会进行搜索首先展示全部,同时利用ajax对乡村,见闻,秉烛夜谈(论坛)模块进行搜索。

这样的前提在于数据库表的设计。

数据库有关的有主要有2类个表。一个是tag标签表结构如下:

id         tag_name

另一个是tag和这个三个模块的关系表

id         otherId      tag_id      flag

其中第一个表中的标签不能重,也就是每一个用户在发表论坛提问或者编写文章的时候,都会将标签存入数据库,然后这些标签设置成unique。在第二个表中的otherId和flag一起作为中间关系表,其中flag可以代表article(也就是用户文章),question(也就是用户论坛提问),然后这个otherId就是对准article或者question各自表中的ID号,也就是说otherID根据flag来确定这个ID是question表中主键id还是其他表中的主键id。
而tag_id就是第一个表中的标签ID号。

所以当用户搜索一个标签“AA”的时候,先从第一个标签表中得到标签ID号。随后带着这个ID号去第二个表中进行全栈搜索,得到所有的有关这个标签的所有信息。
然后通过ajax一步刷新,进行分页和展示

  • 实现效果2:搜索多关键字高亮处理

利用全排列的方式,将搜索关键字,假如搜索:ABC或者BCA或者CBA会得到相同的搜索结果,同时将ABC的排序高与BA或者BC只有两个关键字的搜索信息。

这样有一个不好的效果,就是搜索效率,虽然看上去搜索结果的确更加符合输入的搜索信息,但是搜索显得很拖拉,这是日后会加以改进的地方

分割关键字全排列:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1package com.Algorithm;
2/*
3 * 分割关键词
4 * 去前尾空格  再按中间空格取出关键词
5 */
6public class KeywordSplit {
7
8    public String[]  getKeyWord(String str){
9        str=str.trim();
10        char kw[]=str.toCharArray();
11        String wd="";
12        String word[]=new String[100];
13        int j=0;
14        for(int i=0;i<kw.length;i++)
15        {
16            if(kw[i]!=' '){
17                wd=wd+kw[i];
18            }
19            else if(!wd.equals("")){
20                word[j]=""+wd;
21                wd="";
22                j++;
23            }
24        }
25        if(!wd.equals(""))word[j]=wd;
26        String word1[]=new String[j+1];
27        System.arraycopy(word, 0, word1, 0, j+1);
28        return word1;
29    }
30}
31

1
1`

package com.Algorithm;
/*
* 进行全排列
*/
public class Arrange {


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
1private String hql="'%";
2
3public String getHql() {
4    return hql;
5}
6
7
8public void arrange (String a1,String[] str, int st, int len)//a1代表数据库字段 content(在content中匹配 % %)
9{  
10    if (st == len - 1)  
11    {  
12        for (int i = 0; i < len; i ++)  
13        {  
14            hql=hql+str[i]+"%";
15        }  
16        // 因为后续需要进行执行SQL语句即:**** like '%A%B%' or
17        // like  '%B%A' or like '%A%' or like '%B%'
18         hql=hql+"' or "+a1+" like '%";
19    }  
20    else  
21    {  
22        for (int i = st; i < len; i ++)  
23        {  
24            swap(str, st, i);  
25            arrange(a1, str, st + 1, len);  
26            swap(str, st, i);  
27        }  
28    }    
29}
30public   void swap(String[] str, int i, int j)  
31{  
32    String temp = new String();  
33    temp = str[i];  
34    str[i] = str[j];  
35    str[j] = temp;  
36}  
37
38

}

源码或者运行文件及数据库

SSH:利用Struts2+Hibernate4+Spring4+SQLServer框架,搭建一个前后端web网站(1)

SSH:利用Struts2+Hibernate4+Spring4+SQLServer框架,搭建一个前后端web网站(2)

SSH:利用Struts2+Hibernate4+Spring4+SQLServer框架,搭建一个前后端web网站(3)

SSH:利用Struts2+Hibernate4+Spring4+SQLServer框架,搭建一个前后端web网站(4)

给TA打赏
共{{data.count}}人
人已打赏
安全技术

c++ list, vector, map, set 区别与用法比较

2022-1-11 12:36:11

安全漏洞

HTC承认其智能手机存漏洞可能泄露WiFi密码

2012-2-3 11:12:22

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索