对于数据库里的多张表怎么利用lucene等实现全文检索
比如 SegmentFault 每一个问题(问题 回答 标签)有多张表,怎么利用lucene等实现全文检索,对全文检索的应用没接触过,希望能详解。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
比如 SegmentFault 每一个问题(问题 回答 标签)有多张表,怎么利用lucene等实现全文检索,对全文检索的应用没接触过,希望能详解。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(4)
对于没有入门的,想快速使用Lucene,这么理解吧:
1.首先你要弄清楚Lucene搜索的方式与数据的异同;
数据库的搜索是对表和的记录的各项field进行like查询,返回记录,得到查询的结果集。
Lucene是全文检索是对索引中Document的各field进行匹配,可返回document,得到查询的结果集。
2.创建索引;
明白第一步,就要把数据库表字段的信息转换成Document,实际就是创建索引。
最简单的实现,你把数据库一个问题及回答、标签数据必要的字段放进一个Document对象里面。
//伪代码
Document doc = new Document();
doc.add(new Field("问题ID", 值));
doc.add(new Field("问题标题", 值));
doc.add(new Field("问题内容", 值));
doc.add(new Field("回答id_1", 回答1内容));
doc.add(new Field("回答id_2", 回答2内容));
doc.add(new Field("回答id_3", 回答3内容));
//写索引
new IndexWriter().addDocument(document);
3.搜索索引,那用户输入,对Document的Field进行搜索就可以了,返回分页结果集;
4.页面显示,每条结果项里面有对应的问题ID,可以用ID去数据库查询其它相关的信息,显示出来。
大概过程是这样,实际操作贴下我的笔记吧,大概有几篇甚至带源码,入门上手完全没问题。
Lucene第六篇:Lucene索引操作
Lucene第七篇:在你的项目中集成全文检索
楼主只是想要支持全文检索的话,我是这样考虑的.
如果你你还想使用数据库同时兼顾全文检索,你可以考虑使用pg,这个数据库是支持全文检索的;
如果你使用lucene的话,lucene里面一个document就是对于oss里面的一条记录,一个field就是oss里面一个字段..像sf这种估计要这样吧..
field1 id not-analyzer
field2 question chinese-analyzer
field3 answer1+answer2+.. chinese-analyzer
field4 tag 使用空格分词
每新建一个问题就新增一个doc..用户更新问题或添加答案..就会更新倒排索引..
我这个只是简单猜测...我不是sf的开发者哈..
如果是简单的索引的话,不需要做统计这些。
那么你完全可以自己写一个翻译器,对不同的表翻译成最终你需要的内容。
好比你做一个翻译模版,需要id,name,content,type
然后你其他表去填充这个模版即可。
根据业务做一个“视图” 考虑哪些需要检索、哪些需要展示(列表、详情)、哪些需要做导航(facet)等等~~~