请问lucene.net的索引文件怎么和数据库中的数据同步?
请问大家有什么好的策略,我现在是每隔10钟去数据库遍历一遍,但是在这10钟里,用户上传的数据搜不到啊(因为还没同步)时间间隔短了,又会影响性能
本来想弄一个DataTable暂时在内在中扛一下,等10钟的时候一起同步,可是我们的web服务器有多个地方,不是一台服务器,请大家帮帮忙 --------------------编程问答-------------------- lucene的索引搜索创建是比较麻烦的,每一次的更新在搜索器中都需要进行repen索引文件,所以不适合做实时数据的搜索。同步方式可以参考我的几种方式:
1.remoting或者webservice,入库的同时,将数据直接传递给LUCENE服务器,由lucene服务端接收后进行分词索引
2.你可以数据库增加一个status状态,索引过的数据为1,未索引的数据为0,每次从数据库中取未索引的数据即可
3.多台服务器的情况下,尽量采用分块索引,每隔一定时间统一合并所有索引
--------------------编程问答-------------------- 你好,首先感谢你的回答
你说lucene不适合做实时数据搜索,请问什么适合呢? --------------------编程问答--------------------
lucene.net 可以做本地的数据存储文件 更新的话 不是从本地数据库更新 所有用lucene.net都去web服务器更新
还有10分钟更新一次 的确很平凡 不知道你的数据量大不大 如果不算大没什么问题 数据量大的话不适合频繁更新 --------------------编程问答--------------------
请问去Web服务器更新是什么意思,数据是存在数据库里的啊 --------------------编程问答--------------------
lucene.net 是一个全文搜索引擎 他具备数据存储并检索的功能 你可以把数据库里查询到的记录通过lucene.net来转化成lucene.net 能索引的文件记录集(相当于自己的本地数据库) 这样用lucene.net 自带的方法就可以检索文件里的数据了 即便是断网也可以查询 以后数据的更新只要定期去web服务器获取新的数据取代就的数据就行了 --------------------编程问答-------------------- 实时搜索肯定不行的,因为你每次的增量索引,搜索器都需要进行reopen,当你的数据量越来越多时,索引文件会越来越大,reopen的速度也会变慢,超过千万的数据会很明显,所以如果想要实时的,你可以采用如下几个方案:
1.不要每次全部索引,用分块索引,或者内存索引,每隔30秒或者索引了1000数据,就把索引文件合并掉,同时,立刻通知后台更新索引器indexsearch进行reopen操作,这样的缺点是,数据会有延迟,而且后端索引器只允许运行一个
2.减少索引字段,以便减少索引的大小,可以加快reopen速度
3.尽量采用分布式索引+数据库分区表设计,例如每隔10天新建索引文件,保证索引文件大小维持在一定范围内,前端搜索配合时间限制,例如,只允许搜索1一个月的数据,则需要同时并发搜索3个索引库,将结果集合并,传递给前端
4.高速缓冲设计,缓冲服务器将搜索结果保存起来,例如,常用搜索器,每隔一定时间自动去搜索结果,将结果储存到内存中,每次读取则只需要从缓冲服务器进行读取即可
--------------------编程问答--------------------
谢谢你,你肯定做过这方面的项目,请问你当时是用什么方案解决的呢 --------------------编程问答--------------------
是的,以后只要定期去数据库同步一下就可以了,但是用户新增加的数据在数据库里,不在lucene文件中,在没同步的这段时间里,用户搜不到数据怎么办呢?? --------------------编程问答--------------------
不仅定期自动更新 同时我还做过一个按钮就是让用户自己自动选择更新 看你的用户自己更新频率拼不频繁 如果频繁可以取消定期更新的功能 --------------------编程问答-------------------- 请问我把用户查过的词,缓存到httpruntime.cache 里面,然后用户查的时候先去Cache去找,找不到,再去lucene查,这样有没有影响,数据库里面有百万条了 --------------------编程问答-------------------- 这个要根据实际项目来进行判断,没有一种全面的解决方案,只有争对特定项目制定特定的搜索引擎解决方案,你可以将你需要的需求分析完整列出来,我帮你设计一个解决方案
--------------------编程问答--------------------
我现在做的一个网盘网站,做了站内搜索,用lucenet.net ,数据非常多,可能有几百万条,现在是每隔10分钟去同步一次,没有缓存
现在想要的是在这10分钟之内用户上传的文件找不到怎么办?
还有要怎么优化?比如索引文件的优化
Thanks --------------------编程问答-------------------- 每隔十分钟lucene和数据库同步一次,并记录同步时间time1,搜索时先搜索Lucene索引结果,再搜索数据库中刚过去的(10-(now-time1))分钟内的数据,把再次搜索的数据合并。因为十分钟内的数据量不会太大,你用异步方式把两次查询的数据加载到前台,用户应该看不出差别。 --------------------编程问答-------------------- 我也有同样的问题,求助啊
补充:.NET技术 , C#