如何在网络应用程序中集成数据库搜索和 pdf 搜索?
我有一个带有自定义搜索引擎的 jsp Web 应用程序。
搜索引擎基本上构建在 SQL Server 数据库的“文档”表之上。
举例来说,每个文档记录具有三个字段:
- 文档ID
- “描述”(文本字段)
- “附件”,文件系统中pdf文件的路径。
搜索引擎实际上在描述字段中搜索关键字,并在 HTML 页面中返回结果列表。现在我想在pdf文件内容中搜索关键字。
我正在研究 Lucene、Tika、Solr,但我不明白如何使用这些框架来实现我的目标。
一种可能的解决方案:使用 Tika 提取 pdf 内容并存储在新的文档表字段中,这样我就可以在该字段上编写 SQL 查询。
有更好的选择吗? 我可以使用 Solr/Lucene 索引功能作为基于 SQL 的搜索引擎的集成而不是完全替代它吗?
谢谢
I've a jsp web application with a custom search engine.
The search engine is basically build on top of a 'documents' table of a SQL Server database.
To exemplify, each document record has three fields:
- document id
- 'descripion' (text field)
- 'attachment', a path of a pdf file in the filesystem.
The search engine actually searches keywords in description field and returns a result list in an HTML page. Now I want to search keywords even in the pdf file content.
I'm investigating about Lucene, Tika, Solr, but I don't understand how I can use these frameworks for my goal.
One possible solution: using Tika to extract pdf content and store in a new document table field, so I can write SQL queries on this field.
Are there better alternatives?
Can I use Solr/Lucene indexing features as an integration of SQL-based search engine and not as a totally substitute of it?
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我认为 Lucene 完全独立于 SQL 数据库,即您不会使用 SQL/jdbc/任何 DB 来查询 Lucene,而是使用它自己的 API 和数据存储。
您当然可以使用 Tika 提取 pdf 的全文,存储它,并使用 SQL DB 提供的任何内容。全文搜索能力。
如果您使用 Hibernate,Hibernate Search 是一款出色的产品,它集成了 SQL 存储和卢塞恩。但您必须采用 Hibernate/JPA 方式,这对于您的项目来说可能有点过分了。
I would consider Lucene to be completely independent of an SQL Database, i.e. you will not use SQL/jdbc/whatever DB to query Lucene, but its own API and its own data store.
You could of course use Tika to extract the full text of a pdf, store it, and use whatever your SQL DB provides re. fulltext search capacity.
If you are using Hibernate, Hibernate Search is a fantastic product which integrates both an SQL store and Lucene. But you would have to go the Hibernate/JPA way, which might be overkill for your project.