利用标签和关键字全栈搜索
- 实现效果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)