当前位置:首页 » 操作系统 » lucene数据库

lucene数据库

发布时间: 2022-05-31 02:45:08

Ⅰ 在使用Lucene工具包后还需要数据库

当然需要数据库了。你数据库是存放你的数据。而Lucene只是按照他的切割方法把数据弄成index和key,这样方便搜索,避免复杂的数据库查询。

Ⅱ 如何用Lucene搜索数据库里的内容

首先,应该知道lucene检索的是索引文件,而索引文件则是依据于数据库创建而成的。那么问题来了,你想怎么去创建索引呢? 一般来说,这个得看需求了,最主要是考虑对数据的实时性要求高不高、数据量大不大?额,就假设数据量比较大吧,毕竟数据量.

Ⅲ 精确查询时数据库与lucene索引效率哪个高

这个对比的意义不是特别大,因为应用的场景不一样。比如说:

  1. 数据库单节点部署,不做分库分表,不做集群,为查询字段建立索引。此时lucene和数据库效率差距不大。但数据越多,lucene的优势就更明显。

  2. 数据库分库分表,建立索引。足够的优化之后,在精确查询的情况下,两者依然可以保持在毫秒级的查询效率。比如某宝,优化后的mysql并不比lucene慢。

  3. 要不要分页。由于lucene是把所有的相关信息查出来,放入内存,然后再进行分页的,所以,当数据量较大的情况下,数据库的分页效率会更高。

总结来说,lucene是做全文索引的,如果完全的精确查询,数据库就能满足要求。并且数据库的存入效率更高。

Ⅳ 如何用java的lucene对数据库进行全文检索

lucene是一个公用的全文索引组件,它的目标是把各种各样格式的数据转化成lucene特有的索引文件格式,这样才能通过lucene的高速检索机制进行全文检索。

你的数据来源可以是关系数据库,可以是word、execl、txt文档,可以是html网页,对于这些数据源,你必须将它们内部的数据读取出来,并封装成lucene的document实例,之后让lucene帮你构建索引。

举个例子:你的有一个用户数据库,里面存储了几十万的用户信息,你现在要对这个数据库进行全文索引,那么你要做的事情是:

1.写一段传统的JDBC程序,讲每条的用户信息从数据库读取出来
2.针对每条用户记录,建立一个lucene document
Document doc = new Document();
并根据你的需要,将用户信息的各个字段对应luncene document中的field 进行添加,如:
doc.add(new Field("NAME","USERNAME", Field.Store.YES,Field.Index.UN_TOKENIZED));
然后将该条doc加入到索引中, 如: luceneWriter.addDocument(doc);
这样就建立了lucene的索引库
3.编写对索引库的搜索程序(看lucene文档),通过对lucene的索引库的查找,你可以快速找到对应记录的ID
4.通过ID到数据库中查找相关记录

上面阐述了lucene的大体用法,不知道是不是说的很清楚。

Ⅳ lucene根据数据库记录id删除索引无效

看一下是不是建索引的问题(Field选取的不对,一般id字段用Field.Index.NOT_ANALYZED),

我用lucene 3.6.2, IKAnalyzer2012_u6.jar测试的


importjava.io.File;
importorg.apache.lucene.analysis.Analyzer;
importorg.apache.lucene.document.Document;
importorg.apache.lucene.document.Field;
importorg.apache.lucene.index.IndexReader;
importorg.apache.lucene.index.IndexWriter;
importorg.apache.lucene.index.IndexWriterConfig;
importorg.apache.lucene.queryParser.MultiFieldQueryParser;
importorg.apache.lucene.search.IndexSearcher;
importorg.apache.lucene.search.Query;
importorg.apache.lucene.store.Directory;
importorg.apache.lucene.store.FSDirectory;
importorg.apache.lucene.util.Version;
importorg.wltea.analyzer.lucene.IKAnalyzer;
publicclassLucenDemo{
publicstaticvoidmain(String[]args){
Stringid="456";
createIndex();
printTotalHits(id);
deleteById(id);
printTotalHits(id);
}
staticStringindexPath="E:\lucene-demo-index\";
(Stringid){
try{
Analyzeranal=newIKAnalyzer(true);
MultiFieldQueryParserparser=newMultiFieldQueryParser(Version.LUCENE_36,newString[]{"id"},anal);
Queryquery=parser.parse(id);

Directorydir=FSDirectory.open(newFile(indexPath));
IndexReaderindexReader=IndexReader.open(dir);

IndexSearchersearcher=newIndexSearcher(indexReader);

System.out.println(searcher.search(query,10).totalHits);

indexReader.close();

}catch(Exceptione){
e.printStackTrace();
}
}
publicstaticvoiddeleteById(Stringid){
try{
Analyzeranal=newIKAnalyzer(true);
MultiFieldQueryParserparser=newMultiFieldQueryParser(Version.LUCENE_36,newString[]{"id"},anal);
Queryquery=parser.parse(id);

Directorydir=FSDirectory.open(newFile(indexPath));
IndexWriterConfigconfig=newIndexWriterConfig(Version.LUCENE_36,anal);
IndexWriterindexWriter=newIndexWriter(dir,config);
indexWriter.deleteDocuments(query);
indexWriter.commit();
indexWriter.close();
}catch(Exceptione){
e.printStackTrace();
}
}
publicstaticvoidcreateIndex(){
try{
Analyzeranalyzer=newIKAnalyzer(true);

Directorydir=FSDirectory.open(newFile(indexPath));
IndexWriterConfigconfig=newIndexWriterConfig(Version.LUCENE_36,analyzer);
IndexWriterindexWriter=newIndexWriter(dir,config);

Documentdoc1=newDocument();
doc1.add(newField("id",false,"123",Field.Store.YES,Field.Index.NOT_ANALYZED,Field.TermVector.NO));
indexWriter.addDocument(doc1);

Documentdoc2=newDocument();
doc2.add(newField("id",false,"456",Field.Store.YES,Field.Index.NOT_ANALYZED,Field.TermVector.NO));
indexWriter.addDocument(doc2);

Documentdoc3=newDocument();
doc3.add(newField("id",false,"789",Field.Store.YES,Field.Index.NOT_ANALYZED,Field.TermVector.NO));
indexWriter.addDocument(doc3);

indexWriter.commit();
indexWriter.close();
}catch(Exceptione){
e.printStackTrace();
}
}
}

Ⅵ 如何用Lucene索引数据库

Lucene一个常见的用例是在一个或者多个数据库表进行全文检索。 虽然MySql有全文检索的功能,但是如果字段和数据量增加,MySql的性能会减低很快。
映射数据到Lucene
用伪代码表示:
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然后根据类型来区分。原因:
可以更简单的维护操作。

Ⅶ 想请问一下数据库索引和lucene索引究竟是个什么东西二者有什么区别没有

数据库索引是根据字段的,
lucene是对文章全文进行检索,一般都是对文章切分出一个个的词,对词建索引,搜索时匹配上词的文章按相关度进行排序

Ⅷ 如何使用lucene改造oracle数据库

Lucene一个常见的用例是在一个或者多个数据库表进行全文检索。 虽然MySql有全文检索的功能,但是如果字段和数据量增加,MySql的性能会减低很快。映射数据到Lucene用伪代码表示:String sql = “select id, firstname, lastname, phone, email fro...

Ⅸ Lucene如何搜索数据库数据呢

首先,应该知道lucene检索的是索引文件,而索引文件则是依据于数据库创建而成的。那么问题来了,你想怎么去创建索引呢?
一般来说,这个得看需求了,最主要是考虑对数据的实时性要求高不高、数据量大不大?额,就假设数据量比较大吧,毕竟数据量太小也没必要使用lucene。
1、数据实时性要求不高。可定时增量更新索引,以天或几个小时为单位。
2.数据实时性要求较高。可在数据入库时,立即进行索引更新操作。那么问题又来了数据量比较大的时候,更新一次索引是比较慢的。所以,还得继续考虑缓存策略问题,将新增数据保存在缓存中,选择合适的时间进行提交。

Ⅹ Lucene怎么查询数据库里的数据渲染页面

你说的是查询关键字之后高亮显示吧。
一般要建立自己的索引,不是连接数据库。
然后检索关键字,
你可以找一下高亮插件
然后把结果显示出来。
祝好运,望采纳。

热点内容
编程中的变量 发布:2024-05-17 11:33:06 浏览:776
加密视频怎么解密 发布:2024-05-17 11:02:52 浏览:571
柳工挖机密码多少合适 发布:2024-05-17 11:00:40 浏览:188
android工程叹号 发布:2024-05-17 10:56:21 浏览:481
在苹果手机应用怎么比安卓贵 发布:2024-05-17 10:56:20 浏览:548
赛欧313配置怎么样 发布:2024-05-17 10:43:16 浏览:989
c语言预算 发布:2024-05-17 10:43:16 浏览:493
推荐对称加密算法 发布:2024-05-17 10:43:15 浏览:823
有存储功能计算器 发布:2024-05-17 10:42:34 浏览:119
小米账号密码保险箱在哪里 发布:2024-05-17 10:17:00 浏览:752