首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

最简单的全文检索 实现方式 哇哈哈! 欢迎拍砖!该怎么解决

2012-02-15 
最简单的全文检索 实现方式 哇哈哈! 欢迎拍砖!!最简单的全文检索 实现方式 哇哈哈! 欢迎拍砖!!比如简历管

最简单的全文检索 实现方式 哇哈哈! 欢迎拍砖!!
最简单的全文检索 实现方式 哇哈哈! 欢迎拍砖!!

比如简历管理的系统,简历有 姓名、性别、年龄、职业、行业、自我描述、工作经历、教育经历……等等

我的想法是,有一张 简历检索表,只有两个 字段,简历的主键和简历信息,在新增简历的时候,把简历的所有信息都存到 简历检索表的信息 字段里,那么在我检索的时候,只要用 LIKE 语句就能轻松实现全文检索,大家意下如何? 欢迎拍砖!!

[解决办法]
学习下
[解决办法]
哦!是一个做法。
不过现在全文检索,比如lucene,并不是很复杂,何必自己鼓捣呢?


[解决办法]
纵表转横表 然后LIKE。
你的意思我也明白 把所有字段数据放到一个新的字段 然后LIKE吧?
[解决办法]

探讨
是不是 早就有人想过这种办法了?

[解决办法]
进来学习学习
[解决办法]
最近就在做,,用数据库的反向索引吧!!!


不用 like 直接 keyname='' 最全文索引!
[解决办法]
很好。
不是说你这个方法很好,也没有说他不好的意思。我想说编程需要一些小聪明,需要一些自己的想法。哪怕他是错的。不好的。

[解决办法]



[解决办法]
如果字段多或者字段内容多的时候呢?
用like 检索一偏很大的文章也不见的会快啊...
[解决办法]
你这样考虑不是很周到, 创建简历可能影响不是很大, 但是如果你做更新维护简历的时候,还要更新这个简历索引表,这样代价应该挺大的。还是用Lucene比较好,简单又好用
[解决办法]
我有个简单的想法
 我把代码贴上来
 不知道是不是LZ想要的
 
Java code
import java.io.IOException;import java.io.PrintWriter;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;import javax.servlet.*;import javax.servlet.http.*;public class dosearch extends HttpServlet {    private static final String CONTENT_TYPE = "text/html; charset=GBK";    public void init(ServletConfig config) throws ServletException {        super.init(config);    }    public void service(HttpServletRequest request,                         HttpServletResponse response) throws ServletException, IOException {response.setContentType(CONTENT_TYPE);        PrintWriter out = response.getWriter();        out.println("<html>");        out.println("<head><title>dosearch</title></head>");        out.println("<body>");        request.setCharacterEncoding("gbk");        String search=request.getParameter("content");        search=search.trim();        String sql=null;        String[] lookup=search.split(" ");                ServletContext ctx=request.getSession().getServletContext();        //获取Web应用程序初始化参数        String url=ctx.getInitParameter("dbURL");        String driver=ctx.getInitParameter("jdbcDriver");                for(int i=0;i<lookup.length;i++){            //out.print(lookup[i]+"<br />");            sql=sql+"title like '%"+lookup[i].trim()+"%' or ";            sql=sql+"some_text like '%"+lookup[i].trim()+ "%' or ";        }        sql=sql.substring(4,sql.length()-3) ;        sql=sql+" order by id desc";                Connection conn;        Statement stmt;        ResultSet rs;        try{        Class.forName(driver);        conn=DriverManager.getConnection(url);        stmt=conn.createStatement();        sql="select * from test where "+sql;        //out.print(sql+"<br />");                //rs=stmt.executeQuery("select * from content where content like '反'");        rs=stmt.executeQuery(sql);                /*int count=rs.getRow();        if(count==0){            out.print(count);        }else{*/        while(rs.next()){        String title=rs.getString("title");            String content=rs.getString("some_text");                //out.print(content+"   "+title+"<br />");        String title1=null;        String content2=null;        for(int i=0;i<lookup.length;i++){            title1 = title.replace(lookup[i],"<font color = red>"+lookup[i].trim()+"</font>");            //out.print(lookup[i]+"<br />");            //out.print(title1+"<br />");            content2 = content.replace(lookup[i],"<font color=red>"+lookup[i].trim()+"</font>");            //out.print(content2+"<br /><br /><br />");        }                      out.print(title1+"<br />");             out.print(content2+"<br /><br /><br />");        }        // }        }catch(Exception ex){            out.print("<p align=center><font size=5 color=red>数据库访问出错!</font></p>"+ex.getMessage());            ex.printStackTrace();        }        out.println("</body></html>");        out.close();    }} 


[解决办法]
一旦简历越来越多,用like的方法,效率上是个很大的问题
[解决办法]

探讨
哦!是一个做法。
不过现在全文检索,比如lucene,并不是很复杂,何必自己鼓捣呢?


[解决办法]
支持。。

like 是数据库性能杀手!!
[解决办法]
楼主就是疯狂啊,如果简历数量特别多,数据库就完蛋了

热点排行