论坛首页 Java企业应用论坛

lucene 入门学习,简单实例模访google搜索

浏览 4526 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (1)
作者 正文
   发表时间:2010-05-28   最后修改:2010-05-31
前面一篇文章的介绍是简单的了解lucene 的语法 知道所以然,所以检索内容是自己建的.这篇可以动态

的增加建索引的内容,如果到时信息来源在数据库,就可以直接读数据库的信息 然后建索引了

这样可以更深的了解lucene搜索.换了一种方法.多一种方法多一种思想.因为这种方法更实际
public static void main(String[] args) throws CorruptIndexException,
            LockObtainFailedException, IOException {

        String content = "学JAVA到刘志猛博客"; // 定义要建索引的内容
        String sql = "刘志猛"; // 要搜索的关键字
        Hits hits = null; //Hits类――检索结果
        Query query = null;
        // RAMDirectory directory = new RAMDirectory();
        IndexWriter writer = new IndexWriter("c:\\indexM",
                new StandardAnalyzer(), true);// 这要注意思下
        // new StandardAnalyzer() 是标准过虑,new WhitespaceAnalyzer() 是空格过虑
        // 如果用new WhitespaceAnalyzer() 就是把content="刘志猛 中华 人民国" 按空格来检索了
        // 这方面主知识可以 查 分析器Analysis相关内容

        Document doc = new Document();
        doc.add(new Field("field", content, Field.Store.YES,
                Field.Index.ANALYZED));
        writer.addDocument(doc);
        writer.close();

        // 建索引end

        // 查询
        IndexSearcher searcher = new IndexSearcher("c:\\indexM");

        QueryParser parser = new QueryParser("field", new StandardAnalyzer());
        try {
            query = parser.parse(sql);

            hits = searcher.search(query);
            for (int i = 0; i < hits.length(); i++) {
                if (hits.length() > 0) {
                    Document document = hits.doc(i);
                    System.out.println("内容:" + document.get("field"));
                    String str = document.get("field");
                    str = str.replaceAll(sql, "#" + sql + "#");// 在这我把关键字做了一个替换.这种方法可以模仿google
                                                                // 关键字变红 在这我有#替换了 如果是html页面,可以用html语言替换
                    System.out.println(str);
                } else {
                    System.out.println("没有查到结!");
                }
            }
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

官方链接:http://www.liuzm.com/article/java/9114a.htm
官方博客:http://www.liuzm.com
   发表时间:2010-05-29  
想去答题啊?
0 请登录后投票
   发表时间:2010-05-29  
    不知道lz对lucene理解达到什么层次了,有想过用lucene做中间存储器插件么,换句话说当一个数据库的某个表有千万条记录,然后查出列表时候需要有多表关联,这样在查询时候异常的慢,用lucene做一个临时中间存储器同步数据库数据,这样查找时候会很快,我一直有这个想法写一个这样功能的lucene插件,不知道lz对这个有何见解,可行还是不可行呢。
0 请登录后投票
   发表时间:2010-05-30  
qyhdt 写道
    不知道lz对lucene理解达到什么层次了,有想过用lucene做中间存储器插件么,换句话说当一个数据库的某个表有千万条记录,然后查出列表时候需要有多表关联,这样在查询时候异常的慢,用lucene做一个临时中间存储器同步数据库数据,这样查找时候会很快,我一直有这个想法写一个这样功能的lucene插件,不知道lz对这个有何见解,可行还是不可行呢。

在企业级的开发中,搜索引擎一般是做成一个公共的组件,我个人觉得你说的是使用缓存策略,是不?
0 请登录后投票
   发表时间:2010-05-31  
smallsnake 写道
qyhdt 写道
    不知道lz对lucene理解达到什么层次了,有想过用lucene做中间存储器插件么,换句话说当一个数据库的某个表有千万条记录,然后查出列表时候需要有多表关联,这样在查询时候异常的慢,用lucene做一个临时中间存储器同步数据库数据,这样查找时候会很快,我一直有这个想法写一个这样功能的lucene插件,不知道lz对这个有何见解,可行还是不可行呢。

在企业级的开发中,搜索引擎一般是做成一个公共的组件,我个人觉得你说的是使用缓存策略,是不?


恩,一般在项目中都是做成公共的组件.
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics