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只有两个关键字的搜索信息。

这样有一个不好的效果,就是搜索效率,虽然看上去搜索结果的确更加符合输入的搜索信息,但是搜索显得很拖拉,这是日后会加以改进的地方
分割关键字全排列:
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;i<kw.length;i++)
        {
            if(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)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值