首页 新闻 会员 周边

lucene.net 在数据库中实现检索功能

0
悬赏园豆:20 [已解决问题] 解决于 2012-02-06 15:26

各位大侠们好啊,

  我现在在做一个数据库检索功能用lucene

我的表结构是

 id (编号)    content(内容

表中存放的记录格式都是这样的

1              杯子\水杯\瓷杯子

2              办公桌\写字桌

实现的功能是   我输入的名字  “水杯” 点击查询 通过lucene.net 就能查询出是第一条记录

这样的功能怎么实现啊,小妹在线等,各位路过的帮帮忙吧,小妹的园豆不多了就20个了,都给了。!!!

刘颖的主页 刘颖 | 初学一级 | 园豆:6
提问于:2012-02-06 10:31
< >
分享
最佳答案
0
收获园豆:8
artwl | 专家六级 |园豆:16736 | 2012-02-06 10:53

那个查询结果 “SQL Server 2008 的发布”是怎么被查询来的呢?

刘颖 | 园豆:6 (初学一级) | 2012-02-06 11:12

@刘颖: 这就是Lucene做的事啊

建议把上面那个链接的系列看完,弄明白lucene的原理

artwl | 园豆:16736 (专家六级) | 2012-02-06 11:15

@artwl:  哦,我明白了,是这个   Query query = parser.Parse("sql"); 中的”sql“将有关”sql“的都查询出来的,呵呵!

但是我怎样检索数据库中的记录呢,难道是将数据库中的所有记录都的创建索引吗,存放在一个指定目录下,然后根据这个目录在进行搜索吗,我这样想对吗,还是可以直接用lucene.net 操作数据库呢?

刘颖 | 园豆:6 (初学一级) | 2012-02-06 11:20

@刘颖: 用lucene都是要建索引的

难道是将数据库中的所有记录都的创建索引吗,存放在一个指定目录下,然后根据这个目录在进行搜索吗,我这样想对吗

步骤就是这样的

artwl | 园豆:16736 (专家六级) | 2012-02-06 11:22

我在回答中说的一样,lucne有自己的存储,比如文本,但是跟sql server一点关系没有,人家是apache的一个项目。

today4king | 园豆:3499 (老鸟四级) | 2012-02-06 11:32

@artwl: 谢谢您的帮助,现在我明白了,其实lucene.net 就是将不同的格式转换成索引文件,然后根据索引文件在进行查找相应的记录,我会认真努力看完您的其他系列,再次感谢您!!

刘颖 | 园豆:6 (初学一级) | 2012-02-06 13:11

@artwl: 从数据库读出来的记录需要建立索引文件,然后在访问索引文件,这样会不会太慢了啊,放到内存中会不会耗性能啊,如果我将索引文件放到内存,什么时候需要考虑到内存的开销,当我将索引文件放到内存lucene.net 会不会等我使用完了,自动进行垃圾回收呢?

刘颖 | 园豆:6 (初学一级) | 2012-02-06 13:39
其他回答(2)
0

Lucene.net是根据索引文件查询,先要根据数据库表中的内容建立索引。

收获园豆:7
dudu | 园豆:30994 (高人七级) | 2012-02-06 11:20

建立内容索引是不是就得首先通过sql语句查询出数据库,然后将这些数据通过IndexWriter这个创建成内容索引(本地指定某一个文件目录下假如是A),然后在通过这个IndexSearcher访问A下的文件找到想要记录,是这样的吗?

 

支持(0) 反对(0) 刘颖 | 园豆:6 (初学一级) | 2012-02-06 11:23

@刘颖: 是的,参考文章:Lucene.NET 2.0示例代码

支持(0) 反对(0) dudu | 园豆:30994 (高人七级) | 2012-02-06 11:25

@dudu: 谢谢您的帮助,我认真努力看完您发的例子!!

支持(0) 反对(0) 刘颖 | 园豆:6 (初学一级) | 2012-02-06 13:12

@dudu:  从数据库读出来的记录需要建立索引文件,然后在访问索引文件,这样会不会太慢了啊,放到内存中会不会耗性能啊,如果我将索引文件放到内存,什么时候需要考虑到内存的开销,当我将索引文件放到内存lucene.net 会不会等我使用完了,自动进行垃圾回收呢?

支持(0) 反对(0) 刘颖 | 园豆:6 (初学一级) | 2012-02-06 13:39

@刘颖: 在索引中搜索内容速度很快

支持(0) 反对(0) dudu | 园豆:30994 (高人七级) | 2012-02-06 14:48
0

@刘颖:Lucene是一个高性能、可伸缩的信息搜索(IR)库。工作原理简单说就是把一段话的先切割为最小单元(字、词)编入索引库(ir库),这个中间的过程设计非常复杂的分析工作,比如动词、主语等等。当要搜索的时候,就会检索这个库。建议你看看lucene in action,现在据说有中文版了,不过有英文阅读能力还是建议看原版的,另外lucene中term 和token的概念很重要,也不要把sql server拉进来,他们没有关系。

收获园豆:5
today4king | 园豆:3499 (老鸟四级) | 2012-02-06 11:30

谢谢您的帮助!!!

支持(0) 反对(0) 刘颖 | 园豆:6 (初学一级) | 2012-02-06 13:13

 从数据库读出来的记录需要建立索引文件,然后在访问索引文件,这样会不会太慢了啊,放到内存中会不会耗性能啊,如果我将索引文件放到内存,什么时候需要考虑到内存的开销,当我将索引文件放到内存lucene.net 会不会等我使用完了,自动进行垃圾回收呢?

支持(0) 反对(0) 刘颖 | 园豆:6 (初学一级) | 2012-02-06 13:40

@刘颖: 说实话,不建议你放内存,如果索引文件实在小的可以那随你。其实你的问题主要在搜索速度上没有量的概念,我可以告诉你,百万条记录,每条记录上千字正常的服务器返回结果不会超过50ms(不算其它时间,比如你还去sql server逛逛什么的,只算你发起搜索到得到结果)。

对了你也可以这样想想,如果这些东西还需要我们考虑,那lucene的功能就是不完整的,它的定义就是“如何快速存取文档”,比如lucene中有个叫索引域的东西,它内部有非常复杂的内存管理机制,比如什么时候放什么进内存,放多少进内存都已经帮你考虑好了。

简单一句:要快,你就用它吧!只是分词库比较难搞,可以看看园子里的盘古分词!!~

支持(0) 反对(0) today4king | 园豆:3499 (老鸟四级) | 2012-02-06 14:08
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册