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

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



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

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

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

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


网站一共有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:搜索多关键字高亮处理

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

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

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

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

分割关键字全排列:

package com.Algorithm;
/*
 * 分割关键词
 * 去前尾空格  再按中间空格取出关键词
 */
public class KeywordSplit {

    public String[]  getKeyWord(String str){
        str=str.trim();
        char kw[]=str.toCharArray();
        String wd="";
        String word[]=new String[100];
        int j=0;
        for(int i=0;iif(kw[i]!=' '){
                wd=wd+kw[i];
            }
            else if(!wd.equals("")){
                word[j]=""+wd;
                wd="";
                j++;
            }
        }
        if(!wd.equals(""))word[j]=wd;
        String word1[]=new String[j+1];
        System.arraycopy(word, 0, word1, 0, j+1);
        return word1;
    }
}

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

private String hql="'%";

public String getHql() {
    return hql;
}


public void arrange (String a1,String[] str, int st, int len)//a1代表数据库字段 content(在content中匹配 % %) 
{  
    if (st == len - 1)  
    {  
        for (int i = 0; i < len; i ++)  
        {   
            hql=hql+str[i]+"%";
        }  
        // 因为后续需要进行执行SQL语句即:**** like '%A%B%' or
        // like  '%B%A' or like '%A%' or like '%B%'
         hql=hql+"' or "+a1+" like '%";
    }  
    else  
    {  
        for (int i = st; i < len; i ++)  
        {  
            swap(str, st, i);  
            arrange(a1, str, st + 1, len);  
            swap(str, st, i);  
        }  
    }     
}
public   void swap(String[] str, int i, int j)  
{  
    String temp = new String();  
    temp = str[i];  
    str[i] = str[j];  
    str[j] = temp;  
}  

}

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

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)

你可能感兴趣的:(SSH,ssh,架构)