zoukankan      html  css  js  c++  java
  • 搜索引擎的相关搜索(基于struts2框架通过关键字与后台的xml资源进行匹配实现)

     

     <1>jsp界面:result.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
    <%@ page contentType="text/html;charset=GBK"%>
    <%@page import="java.text.SimpleDateFormat"%>
    <%@page import="org.apache.commons.lang.ObjectUtils.Null"%>
    <%@taglib prefix="s" uri="/struts-tags"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <%
     String path = request.getContextPath();
     String basePath = request.getScheme() + "://"
       + request.getServerName() + ":" + request.getServerPort()
       + path + "/";
    %>
     <%
      ArrayList<ArrayList<String>> MyList = (ArrayList<ArrayList<String>>) request.getAttribute("bookList");
     %>
     <%
      String searchType = (String) request.getAttribute("searchType");
      if (null == searchType) {
       searchType = "all";
      }
     %>
     <%
      int totalPage = 0;
     %>
     <%
      String str_i = (String) request.getAttribute("i");
     %>
     <%
      int i = Integer.parseInt(str_i);
     %>
     <head>
      <title>result</title>
      <base href="<%=basePath%>">
      <meta http-equiv="Content-Type" content="text/html; charset=GBK">
      <meta http-equiv="pragma" content="no-cache">
      <meta http-equiv="cache-control" content="no-cache">
      <meta http-equiv="expires" content="0">
      <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
      <meta http-equiv="description" content="This is my page">
     <style type="text/css">
    <!--
    .STYLE1 {color: #FFFFFF}
    body {
     background-color: white;
    }
    #Layer1 {
     position:absolute;
     400px;
     height:146px;
     z-index:1;
     left: 424px;
     top: 242px;
    }
    -->
            </style>
       
     
     </head>
     <script type="text/javascript">
    var xmlHttpRequest;
    function createXmlHttpRequest()
    {
     if(window.ActiveXObject)
     {
      try
      {
       xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
      }
      catch(e)
      {
       xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");
      }
      return xmlHttpRequest;
     }
     else if(window.XMLHttpRequest)
     {
      return new XMLHttpRequest();
     }
    }
    function auto()
    {
     var query = document.getElementById("query");
     var auto = document.getElementById("auto");
     var tags = document.getElementById("tags");
     if(event.keyCode == 40)
     { 
      if(query.value != "" && auto.style.visibility != "hidden")
      {
       tags.focus();
       tags.selectedIndex = 0;
       query.value = tags.options[0].text;
       return;
      }
     }
     xmlHttpRequest = createXmlHttpRequest();
     xmlHttpRequest.onreadystatechange = backFct;
     var url = "AjaxindexAction.action?tag=" + query.value;
     xmlHttpRequest.open("get",url,true);
     xmlHttpRequest.send(null);
    }
    function backFct()
    {
     if(xmlHttpRequest.readyState == 4 && xmlHttpRequest.status == 200)
     {
      var rs = xmlHttpRequest.responseText;
      if(rs != "")
      {
       var tagsRs = rs.split(",");
       var auto = document.getElementById("auto");
       var tags = document.getElementById("tags");
       var query = document.getElementById("query");
       tags.length = 0;
       tags.size = tagsRs.length;
       for(var i=0;i<tagsRs.length;i++)
       {
        var option = document.createElement("option");
        option.setAttribute("text", tagsRs[i]);
        tags.options[i] = option;
       }
       auto.style.width = query.style.width;
       tags.style.width = query.style.width;
       auto.style.left = query.offsetLeft - 1;
       auto.style.top = query.offsetTop + query.offsetHeight + 1;
       auto.style.visibility = "visible";
      }
      else
      {
       document.getElementById("auto").style.visibility = "hidden";
      }
     }
    }
    function text()
    {
     var query = document.getElementById("query");
     var auto = document.getElementById("auto");
     var tags = document.getElementById("tags");
     if(event.keyCode == 40 || event.keyCode == 38)
     { 
      if(query.value != "" && auto.style.visibility != "hidden")
      {
       query.value = tags.options[tags.selectedIndex].text;
      }
     }
     else if(event.keyCode == 13)
     {
      auto.style.visibility = "hidden";
      query.focus();
     }
    }
    </script>
    <script type="text/javascript" src="external.js"></script>

    <body>
     <div>
      <form action="search.action" method="get" >
       <table border="0" width="400px">
        <tr size="80">

         <td align="center">
          <a
           href="search.action?searchType=all&i=0&keywords=${requestScope.keywords}">
           <%
            if (searchType.equals("all"))
             out.println("<strong>全部</strong>");
            else
             out.println("全部");
           %> </a>
         </td>
         <td align="center">
          <a
           href="search.action?searchType=doc&i=0&keywords=${requestScope.keywords}">
           <%
            if (searchType.equals("doc"))
             out.println("<strong>文档</strong>");
            else
             out.println("文档");
           %> </a>
         </td>
         <td align="center">
          <a
           href="search.action?searchType=mov&i=0&keywords=${requestScope.keywords}">
           <%
            if (searchType.equals("mov"))
             out.println("<strong>视频</strong>");
            else
             out.println("视频");
           %> </a>
         </td>
         <td align="center">
          <a
           href="search.action?searchType=music&i=0&keywords=${requestScope.keywords}">
           <%
            if (searchType.equals("music"))
             out.println("<strong>音乐</strong>");
            else
             out.println("音乐");
           %> </a>
         </td>
         <td align="center">
          <a
           href="search.action?searchType=other&i=0&keywords=${requestScope.keywords}">
           <%
            if (searchType.equals("other"))
             out.println("<strong>其他</strong>");
            else
             out.println("其他");
           %> </a>
         </td>
         <td>
          <br>
          <br>
         </td>
        </tr>
        <tr>
         <td colspan="5">
          <input type="text" name="keywords" id="query" onKeyUp="auto();" style=" 400px; height: 30px; font-size: 18px;"
           value="<%=request.getAttribute("keywords") %>"  />
    <div id="auto" style="border-style: solid; border- 1px; visibility: hidden; position: absolute;margin-left:12px;margin-top:50px">
                     <select id="tags" onkeyup="text();" size="0" style=" margin:-2px;">
                     </select>
    </div>
         </td>
         <td>
          <input type="hidden" name="searchType" value="<%=searchType%>" />
          <input type="hidden" name="i" value="<%=i%>" />
          <input type="submit" style="height:32px; " value="搜索一下" />
         </td>
        </tr>
       </table>
       <table border="0" width="800px">
        <br>
        <HR
         style="FILTER: alpha(opacity =   100, finishopacity =   0, style =   2)"
         width="100%" color="blue" SIZE=10>
        <h1>
         搜索结果:
        </h1>
        <%
         //对搜索结果进行分类计数
         int totalNum = 0;
         if (searchType.equals("all")) {
          for (int m = 0; m < MyList.get(0).size(); m++) {

           totalNum++;

          }
         } else if (searchType.equals("doc")) {
          for (int m = 0; m < MyList.get(0).size(); m++) {
           if (MyList.get(2).get(m).equals("doc")
             || MyList.get(2).get(m).equals("ppt")
             || MyList.get(2).get(m).equals("xls")
             || MyList.get(2).get(m).equals("txt")
             || MyList.get(2).get(m).equals("pdf")) {
            totalNum++;
           }
          }
         } else if (searchType.equals("mov")) {
          for (int m = 0; m < MyList.get(0).size(); m++) {
           if (MyList.get(2).get(m).equals("avi")
             || MyList.get(2).get(m).equals("mpg")
             || MyList.get(2).get(m).equals("3gp")
             || MyList.get(2).get(m).equals("mp4")
             || MyList.get(2).get(m).equals("asf")
             || MyList.get(2).get(m).equals("asx")
             || MyList.get(2).get(m).equals("flv")
             || MyList.get(2).get(m).equals("rmvb")
             || MyList.get(2).get(m).equals("rm")
             || MyList.get(2).get(m).equals("wmv9")
             || MyList.get(2).get(m).equals("mkv")
             || MyList.get(2).get(m).equals("swf")) {
            totalNum++;
           }
          }
         } else if (searchType.equals("music")) {
          for (int m = 0; m < MyList.get(0).size(); m++) {
           if (MyList.get(2).get(m).equals("aac")
             || MyList.get(2).get(m).equals("mp3")) {
            totalNum++;
           }
          }
         } else if (searchType.equals("other")) {
          for (int m = 0; m < MyList.get(0).size(); m++) {
           if (   
                      MyList.get(2).get(m).equals("rar")
             || MyList.get(2).get(m).equals("jpeg")
             || MyList.get(2).get(m).equals("rar")
             || MyList.get(2).get(m).equals("gif")
             || MyList.get(2).get(m).equals("jpg")
             || MyList.get(2).get(m).equals("bmp")
             || MyList.get(2).get(m).equals("png")) {
            totalNum++;
           }
          }
         }
        %>

        <%
         //对搜索结果进行分类输出

         if (searchType.equals("all")) {
          for (; i < MyList.get(0).size(); i++) {

        %>
        <a rel="external"
         href="getTitle.action?describe=<%=MyList.get(3).get(i)%>&author=<%=MyList.get(6).get(i)%>
         &kind=<%=MyList.get(2).get(i)%>&title=<%=MyList.get(0).get(i)%>&url=<%=MyList.get(5).get(i)%>" >
         <font
         size="4"> <%
      out.println(MyList.get(0).get(i));
     %> </font> </a>
        <br>
        <%
         out.print("<font color='blue'>描述:</font>"
             + MyList.get(3).get(i));
        %>
        <%
         out.print("类型为:" + MyList.get(2).get(i));
        %>&nbsp;&nbsp;
        <%
         try {
            out.print("<font color='blue'>全文:</font>"
              + MyList.get(8).get(i).substring(0, 100));
           } catch (IndexOutOfBoundsException e) {
            out.print("无内容");
           }
           out.print("....");
        %>
        <font size="2" color="green"> <%
      out.print("作者为:" + MyList.get(6).get(i));
     %>&nbsp;&nbsp; <%
      out.print("出版社:" + MyList.get(7).get(i));
     %>&nbsp;&nbsp; <%
      out.print("url:" + MyList.get(5).get(i));
     %>&nbsp;&nbsp; <%
      out.print("时间:" + MyList.get(4).get(i));
     %><br><br> </font>
        <% if ((i + 1) % 10 == 0) {
            break;
           }
         }

         }  if (searchType.equals("doc")) {
          for (; i < MyList.get(0).size(); i++) {
           if (MyList.get(2).get(i).equals("doc")
             || MyList.get(2).get(i).equals("ppt")
             || MyList.get(2).get(i).equals("xls")
             || MyList.get(2).get(i).equals("txt")
             || MyList.get(2).get(i).equals("pdf")) {
            
        %>
        <a rel="external"
         href="getTitle.action?describe=<%=MyList.get(3).get(i)%>&author=<%=MyList.get(6).get(i)%>&
         kind=<%=MyList.get(2).get(i)%>&title=<%=MyList.get(0).get(i)%>&url=<%=MyList.get(5).get(i)%>"><font
         size="4"> <%
      out.println(MyList.get(0).get(i));
     %> </font> </a>
        <br>
        <%
         out.print("<font color='blue'>描述:</font>"
              + MyList.get(3).get(i));
        %>
        <%
         out.print("类型为:" + MyList.get(2).get(i));
        %>&nbsp;&nbsp;
        <%
         try {
             out.print("<font color='blue'>全文:</font>"
               + MyList.get(8).get(i).substring(0, 100));
            } catch (IndexOutOfBoundsException e) {
             out.print("无内容");
            }
            out.print("....");
        %>
        <font size="2" color="green"> <%
      out.print("作者为:" + MyList.get(6).get(i));
     %>&nbsp;&nbsp; <%
      out.print("出版社:" + MyList.get(7).get(i));
     %>&nbsp;&nbsp; <%
      out.print("url:" + MyList.get(5).get(i));
     %>&nbsp;&nbsp; <%
      out.print("时间:" + MyList.get(4).get(i));
     %><br><br> </font>
        <%if ((i + 1) % 10 == 0) {
             break;
            }
         }
          }
         }  if (searchType.equals("mov")) {
          for (; i < MyList.get(0).size(); i++) {
           if (MyList.get(2).get(i).equals("avi")
             || MyList.get(2).get(i).equals("mpg")
             || MyList.get(2).get(i).equals("3gp")
             || MyList.get(2).get(i).equals("mp4")
             || MyList.get(2).get(i).equals("asf")
             || MyList.get(2).get(i).equals("asx")
             || MyList.get(2).get(i).equals("flv")
             || MyList.get(2).get(i).equals("rmvb")
             || MyList.get(2).get(i).equals("rm")
             || MyList.get(2).get(i).equals("wmv9")
             || MyList.get(2).get(i).equals("mkv")
             || MyList.get(2).get(i).equals("swf")) {

                %>
        <a rel="external"
         href="getTitle.action?describe=<%=MyList.get(3).get(i)%>&author=<%=MyList.get(6).get(i)%>&kind=<%=MyList.get(2).get(i)%>
         &title=<%=MyList.get(0).get(i)%>&url=<%=MyList.get(5).get(i)%>" ><font
         size="4"> <%
      out.println(MyList.get(0).get(i));
     %> </font> </a>
        <br>
        <%
         out.print("<font color='blue'>描述:</font>"
              + MyList.get(3).get(i));
        %>
        <%
         out.print("类型为:" + MyList.get(2).get(i));
        %>&nbsp;&nbsp;
        <%
         try {
             out.print("<font color='blue'>全文:</font>"
               + MyList.get(8).get(i).substring(0, 100));
            } catch (IndexOutOfBoundsException e) {
             out.print("无内容");
            }
            out.print("....");
        %>
        <font size="2" color="green"> <%
      out.print("作者为:" + MyList.get(6).get(i));
     %>&nbsp;&nbsp; <%
      out.print("出版社:" + MyList.get(7).get(i));
     %>&nbsp;&nbsp; <%
      out.print("url:" + MyList.get(5).get(i));
     %>&nbsp;&nbsp; <%
      out.print("时间:" + MyList.get(4).get(i));
     %><br> <br></font>
        <%if ((i + 1) % 10 == 0) {
             break;
            }
        
         }
          }
         }  if (searchType.equals("music")) {
          for (; i < MyList.get(0).size(); i++) {
           if (MyList.get(2).get(i).equals("aac")
             || MyList.get(2).get(i).equals("mp3")) {

            if ((i + 1) % 10 == 0) {
             break;
            }
        %>
        <a rel="external"
         href="getTitle.action?describe=<%=MyList.get(3).get(i)%>&author=<%=MyList.get(6).get(i)%>
         &kind=<%=MyList.get(2).get(i)%>&title=<%=MyList.get(0).get(i)%>&url=<%=MyList.get(5).get(i)%>" ><font
         size="4"> <%
      out.println(MyList.get(0).get(i));
     %> </font> </a>
        <br>
        <%
         out.print("<font color='blue'>描述:</font>"
              + MyList.get(3).get(i));
        %>
        <%
         out.print("类型为:" + MyList.get(2).get(i));
        %>&nbsp;&nbsp;
        <%
         try {
             out.print("<font color='blue'>全文:</font>"
               + MyList.get(8).get(i).substring(0, 100));
            } catch (IndexOutOfBoundsException e) {
             out.print("无内容");
            }
            out.print("....");
        %>
        <font size="2" color="green"> <%
      out.print("作者为:" + MyList.get(6).get(i));
     %>&nbsp;&nbsp; <%
      out.print("出版社:" + MyList.get(7).get(i));
     %>&nbsp;&nbsp; <%
      out.print("url:" + MyList.get(5).get(i));
     %>&nbsp;&nbsp; <%
      out.print("时间:" + MyList.get(4).get(i));
     %><br><br> </font>
        <%
         }
          }
         }  if (searchType.equals("other")) {
          for (; i < MyList.get(0).size(); i++) {
           if (MyList.get(2).get(i).equals("rar")
             || MyList.get(2).get(i).equals("jpeg")
             || MyList.get(2).get(i).equals("rar")
             || MyList.get(2).get(i).equals("gif")
             || MyList.get(2).get(i).equals("jpg")
             || MyList.get(2).get(i).equals("bmp")
             || MyList.get(2).get(i).equals("png")) {

            
        %>
        <a rel="external"
         href="getTitle.action?describe=<%=MyList.get(3).get(i)%>&author=<%=MyList.get(6).get(i)%>&
         kind=<%=MyList.get(2).get(i)%>&title=<%=MyList.get(0).get(i)%>&url=<%=MyList.get(5).get(i)%>"><font
         size="4"> <%
      out.println(MyList.get(0).get(i));
     %> </font> </a>
        <br>
        <%
         out.print("<font color='blue'>描述:</font>"
              + MyList.get(3).get(i));
        %>
        <%
         out.print("类型为:" + MyList.get(2).get(i));
        %>&nbsp;&nbsp;
        <%
         try {
             out.print("<font color='blue'>全文:</font>"
               + MyList.get(8).get(i).substring(0, 100));
            } catch (IndexOutOfBoundsException e) {
             out.print("无内容");
            }
            out.print("....");
        %>
        <font size="2" color="green"> <%
      out.print("作者为:" + MyList.get(6).get(i));
     %>&nbsp;&nbsp; <%
      out.print("出版社:" + MyList.get(7).get(i));
     %>&nbsp;&nbsp; <%
      out.print("url:" + MyList.get(5).get(i));
     %>&nbsp;&nbsp; <%
      out.print("时间:" + MyList.get(4).get(i));
     %><br><br> </font>
        <%if ((i + 1) % 10 == 0) {
             break;
            }
         }
          }
         }
        %>

        <br>
       </table>
     
       <%if(totalNum%10!=0){
        totalPage = totalNum / 10 + 1;
        }
        else{
        totalPage = totalNum / 10 ;
        }
       %>
       <%
        String string_i;
       %>
       
       </form>
    </div>
       
      <br>

       <form action="search.action" method="post">
        <table border="0" width="400px">
         <tr size="80">
          <%if(totalPage!=1){
           for (int j = 0; j < totalPage; j++) {
            string_i = String.valueOf(j + 1);
          %>
          <a
           href='search.action?searchType=${requestScope.searchType}&keywords=${requestScope.keywords}&i=<%=j * 10%>'>
           <%
            out.println("第" + string_i + "页");
           %> </a>&nbsp;&nbsp;
          <%
           }
           }
          %>
         
        </table>
                </form>
       <div id="split_line">
        <span id="tpl_infor">搜索 <b><s:property value="keywords"
           escape="false" /> </b> 获得约<%=totalNum%>条结果. (用时 <%=MyList.get(9).get(0)%>毫秒)</span>
       </div>
    <div id="auto"  position: absolute; margin-left:429px; margin-top:230px; left: 489px; top: -52px;">
               相关搜索:
       <% List<String> titlelist = new ArrayList<String>();
          titlelist = (List<String>)request.getAttribute("titlelist");
          %>
          <%
          int b = 1;
          for(int a = 0; a < titlelist.size(); a++){
          if(b%5==0){
          out.print("<br>");
          }
          b++;
          %>
       <a href="search.action?searchType=${requestScope.searchType}&keywords=<%=titlelist.get(a)%>&i=0">
          <%out.println(titlelist.get(a));%>&nbsp;&nbsp;
       </a>
          <%
          }
        %>       
       
    </div>
    </body>
    </html>

    <2>编写字符串相似度比较类:

    StringCompare.java

    package com.dreamers.search;

    public class StringCompare {

      private int compare(String str, String target) {
     

       int d[][]; // 矩阵

       int n = str.length();

       int m = target.length();

       int i; // 遍历str的

       int j; // 遍历target的

       char ch1; // str的

       char ch2; // target的

       int temp; // 记录相同字符,在某个矩阵位置值的增量,不是0就是1

       if (n == 0) {

        return m;

       }

       if (m == 0) {

        return n;

       }

       d = new int[n + 1][m + 1];

       for (i = 0; i <= n; i++) { // 初始化第一列

        d[i][0] = i;

       }

       for (j = 0; j <= m; j++) { // 初始化第一行

        d[0][j] = j;

       }

       for (i = 1; i <= n; i++) { // 遍历str

        ch1 = str.charAt(i - 1);

        // 去匹配target

        for (j = 1; j <= m; j++) {

         ch2 = target.charAt(j - 1);

         if (ch1 == ch2) {

          temp = 0;

         } else {

          temp = 1;

         }

         // 左边+1,上边+1, 左上角+temp取最小

         d[i][j] = min(d[i - 1][j] + 1, d[i][j - 1] + 1, d[i - 1][j - 1]

           + temp);

        }

       }

       return d[n][m];

      }

     

      private int min(int one, int two, int three) {

       return (one = one < two ? one : two) < three ? one : three;

      }

     

      /**

      * 获取两字符串的相似度

      *

      * @param str

      * @param target

      * @return

      */

      public float getSimilarityRatio(String str, String target) {

       return 1 - (float) compare(str, target)

         / Math.max(str.length(), target.length());

      }

     

     /* public static void main(String[] args) {

       StringCompare lt = new StringCompare();

       String str = "ABCDEF";

       String target = "FECDBA";

       System.out.println("similarityRatio="

         + lt.getSimilarityRatio(str, target));

      }*/

     }


     <3>在action里相关代码:

     public List<String> titlelist = new ArrayList<String>() ;
     public List<String> db = new ArrayList<String>(); //

    public List<String> init() throws DocumentException, FileNotFoundException, IOException, ClassNotFoundException
        {
     
         XmlReader reader = new XmlReader();                        

         db=reader.getTitle();                                  //读取xml中的资源
         StringCompare it = new StringCompare();
         for(int i = 0 ; i < db.size(); i++){
          if(it.getSimilarityRatio(getKeywords(), db.get(i))>0.3){
           titlelist.add(db.get(i));
          }
         }
         return titlelist;
        }

    public List<String> getTitlelist() throws FileNotFoundException, DocumentException, IOException, ClassNotFoundException {
      titlelist = init();
      System.out.println("titlelist :"+titlelist.get(0));
      return titlelist;
     }

     public void setTitlelist(List<String> titlelist) {
      this.titlelist = titlelist;
     }

    大概就是这样吧,可能有些问题,呵呵,又事留言吧。

  • 相关阅读:
    Different AG groups have the exactly same group_id value if the group names are same and the ‘CLUSTER_TYPE = EXTERNAL/NONE’
    An example of polybase for Oracle
    use azure data studio to create external table for oracle
    Missing MSI and MSP files
    You may fail to backup log or restore log after TDE certification/key rotation.
    Password is required when adding a database to AG group if the database has a master key
    Use KTPASS instead of adden to configure mssql.keytab
    ardunio+舵机
    android webview 全屏100%显示图片
    glide 长方形图片显示圆角问题
  • 原文地址:https://www.cnblogs.com/lcqBlogs/p/2392400.html
Copyright © 2011-2022 走看看