现在要对大量文件进行全文检索,测试表结构如下:
ID TITILE FILEPATH
1 test g:/file/test1.txt
2 test g:/file/test2.txt
filepath存储的是需要检索的文件路径
问题:假设我们现在输入一个关键字为条件,这个关键字可能在test1.txt,test2.txt中出现
在查询后返回符合条件的数据库记录有做过类似项目 或者实验的 麻烦说下思路,谢谢大家
现在主要是不知道如何将索引和数据库记录进行对应。
ID TITILE FILEPATH
1 test g:/file/test1.txt
2 test g:/file/test2.txt
filepath存储的是需要检索的文件路径
问题:假设我们现在输入一个关键字为条件,这个关键字可能在test1.txt,test2.txt中出现
在查询后返回符合条件的数据库记录有做过类似项目 或者实验的 麻烦说下思路,谢谢大家
现在主要是不知道如何将索引和数据库记录进行对应。
那么你搜索到结果时,他返回的应该是 相关的 document。然这个 document 则可心看作是一组相关的数据整体,可以把他比作表中的一行。如果里面有 对应 数据库的中 id 信息,那么通过 lucene 中得到的 id,再从数据库中查找相应的数据就行了。
2楼说的很对 我都考虑到了 我准备在上传文件的时候以数据库对应记录ID的某种格式定义为文件名,这样就不存在把ID还要写入文件以及在读取的问题。
问题是假如和这个关键字匹配的记录有1万个,这些ID存放在哪里?内存?不太现实,而且先不考虑多用户并发的性能 假设单用户1万个ID分页也是头疼的事情
我看了hibernate search 和compass 的简单例子
他们都是对一个数据字段进行索引 所以可以直接返回实体对象 现在的问题还是文件和记录的关联
项目是C++开发组将数据和文件分别入库和上传服务器,索引的建立JAVA这边打算是用定时器或者别的触发机制,现在的问题是数据库记录的实体对象和全文检索返回的数据不能对应,现在暂时能想到的是检索出匹配的文件然后根据文件名(文件名和数据库记录主键ID相关联),再通过数据ID去查询数据库,问题就是数据量很大时返回的ID数量很多,分页就比较麻烦了
2.通过查询索引得出结果
假如和这个关键字匹配的记录有1万个,这些ID存放在哪里?而且先不考虑多用户并发的性能 假设单用户1万个ID分页也是头疼的事情
我看了hibernate search 和compass 的简单例子
他们都是对一个数据字段进行索引 所以可以直接返回实体对象 现在的问题还是文件和记录的关联
无法说清楚这个问题。
学习一下
现在用IKAnalyzer 分词 很不错
现在还是对分页没有太好的想法
现在的问题纠结在 Lucene全文检索不是直接检索的DB中的字段,而是DB中有一个字段是文件路径,检索这个路径下的文件。所以这样就会造成 先按关键字全文检索出匹配的文件, 然后根据文件和DB对应的ID 去DB把对应的数据查询出来,这时候查询出来的数据就可能会很多,当然可以不全部查出来,但是检索后的和DB对应的ID要保存起来吧,这个ID的保存就很麻烦。不知道我说清楚没···
红色部分不理解,你是要保存数据库里找到的id呢还是Lucene里找到的id?
文件和数据库的记录ID已经通过文件名的命名可以进行关联 即 一条记录的ID是1 他对应的文件名是test_1.txt,检索后并处理后我将会得到一个数据库ID的集合,这时候我再去数据库里把对应的记录查询并显示出来,问题就是得到的这个ID集合可能会很多,所以分页不好做
不知道你说的那个版本 或者可以推荐篇文章吗
我看到lucene的分页方式 就是缓存+多次查询
一天的数据量是1千万条 查出来一万条 不多吧···
看来缓存是必须的了 打算用mecache