对于数据库里的多张表怎么利用lucene等实现全文检索

发布于 2022-08-23 23:14:25 字数 80 浏览 20 评论 0

比如 SegmentFault 每一个问题(问题 回答 标签)有多张表,怎么利用lucene等实现全文检索,对全文检索的应用没接触过,希望能详解。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

纵山崖 2022-08-30 23:14:25

对于没有入门的,想快速使用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第七篇:在你的项目中集成全文检索

策马西风 2022-08-30 23:14:25

楼主只是想要支持全文检索的话,我是这样考虑的.
如果你你还想使用数据库同时兼顾全文检索,你可以考虑使用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的开发者哈..

脱离于你 2022-08-30 23:14:25

如果是简单的索引的话,不需要做统计这些。
那么你完全可以自己写一个翻译器,对不同的表翻译成最终你需要的内容。

好比你做一个翻译模版,需要id,name,content,type
然后你其他表去填充这个模版即可。

旧情勿念 2022-08-30 23:14:25

根据业务做一个“视图” 考虑哪些需要检索、哪些需要展示(列表、详情)、哪些需要做导航(facet)等等~~~

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文