java面试题

当前位置: 面试问题网 > java面试题 > 如何用Lucene索引数据库

如何用Lucene索引数据库

Lucene一个常见的用例是在一个或者多个数据库表进行全文检索。 虽然MySql有全文检索的功能,但是如果字段和数据量增加,MySql的性能会减低很快。
   映射数据到Lucene
   通常情况下最需要解决的问题是怎么把你数据库的数据描述到Lucene里面,最可能的解决方法法就是把你的数据表放到平面的Lucence Document对象里面。
   用伪代码表示:
   String sql = “select id, firstname, lastname, phone, email from person”;
   ResultSet rs = stmt.executeQuery(sql);
   while (rs.next()) {
   Document doc = new Document();
   doc.add(new Field(”id”, rs,getString(”firstname”), Field.Store.YES, Field.Index.UN_TOKENIZED));
   doc.add(new Field(”firstname”, rs,getString(”firstname”), Field.Store.YES, Field.Index.TOKENIZED));
   // … repeat for each column in result set
   writer.addDocument(doc);
   }
   显示搜索结果
   当显示搜索结果给用户时,你有两个选择:
   1.因为你的Table已经扁平化到了Lucene里面,所以只需要用Document里面的Field.因为Lucene也非常快,这样会大大减低你的数据库的压力。
   2.如果你要显示另外的数据到你的搜索结果页,你只需要在Hits里面收集他们的ID,然后从数据库去数据再根据结果组装搜索结果页。
   要搜索的东西
   以上列出的方式都是假设把整个结果集放到内存里面,这样在数据集大的话会很容易造成问题,你需要在你的SQL里面做一些分页或者offset
   你还需要在你的结果集里面做一个try/catch,这样当添加一个Document出错的时候不会影响整个过程。
   通常情况下可以把所有的field放到同一个”Contents” field然后只搜索这一个字段,但是需要保留这些field这样可以按field检索。
   如果你需要检索多个table
   通常最好能用不同的索引来搜索不同类型的数据,而不是把他们加到同一个index然后根据类型来区分。
   原因:
   可以更简单的维护操作。如果你只需要对这个表进行一个批处理的update,你只需要重建特定的索引而不是所有的索引。

【如何用Lucene索引数据库】相关文章

1. 如何用Lucene索引数据库

2. 介绍下Lucene建立索引的过程

3. Lucene推荐的分页方式是什么?

4. 请解释一下webService? 如何用.net实现webService

5. 如何查询Oracle数据库中已经创建的索引

6. 为数据库创建索引都需要注意些什么

7. Can a struct inherit from another struct? (结构体能继承结构体吗)

8. 声明struct x1 { . . . }; 和typedef struct { . . . }x2;有什么不同

9. What\'s the difference between Debug and Trace class? (Debug类与Trace类有什么区别)

10. 到底Java是如何传递参数的?是by value或by reference?

本文来源:https://www.mianshiwenti.com/a12300.html

点击展开全部

《如何用Lucene索引数据库》

将本文的Word文档下载到电脑,方便收藏和打印

推荐程度:

进入下载页面

﹝如何用Lucene索引数据库﹞相关内容

「如何用Lucene索引数据库」相关专题

其它栏目

也许您还喜欢