数千份文档(pdf和/或xml)可搜索归档的最佳做法
重温一个陷入僵局的项目,并寻求对数千份“旧”文档进行现代化并通过web提供这些文档的建议 文档的格式多种多样,有些已经过时:(.doc、PageMaker、硬拷贝(OCR)、PDF等)。我们有资金将文档迁移到“现代”格式,并且许多硬拷贝已经被OCR转换成PDF格式——我们最初假设PDF将是最终格式,但我们愿意接受建议(XML?) 一旦所有文档都采用通用格式,我们希望通过web界面使其内容可用并可搜索。我们希望能够灵活地只返回整个文档中搜索“命中”的部分(页面?)(我相信Lucene/elasticsearch可以实现这一点?!?)如果内容都是XML,是否会更灵活?如果是,如何/在何处存储XML?直接在数据库中,还是作为文件系统中的离散文件?文档中嵌入的图像/图形如何 我很好奇其他人会如何处理这件事。没有“错误”的答案,我只是在寻找尽可能多的信息来帮助我们继续前进数千份文档(pdf和/或xml)可搜索归档的最佳做法,xml,pdf,lucene,full-text-search,
elasticsearch,Xml,Pdf,Lucene,Full Text Search,
elasticsearch,重温一个陷入僵局的项目,并寻求对数千份“旧”文档进行现代化并通过web提供这些文档的建议 文档的格式多种多样,有些已经过时:(.doc、PageMaker、硬拷贝(OCR)、PDF等)。我们有资金将文档迁移到“现代”格式,并且许多硬拷贝已经被OCR转换成PDF格式——我们最初假设PDF将是最终格式,但我们愿意接受建议(XML?) 一旦所有文档都采用通用格式,我们希望通过web界面使其内容可用并可搜索。我们希望能够灵活地只返回整个文档中搜索“命中”的部分(页面?)(我相信Lucene/elasti
谢谢你的建议。我已经构建并维护了一个应用程序,可以索引和搜索70k+PDF文档。我发现必须从PDF中提取纯文本,将内容存储在SQL中,并使用Lucene为SQL表编制索引。否则,表现就糟透了 使用或类似,它处理大多数主要文档格式。他们使用Solr/Lucene。总结:我将推荐,但让我们将问题分解并讨论如何实现它: 这有几个部分:
- 包含“文档”文档ID的文档(请参见下面的“父子关系”)
- 正文
- 页码
- 也许是章节的标题或编号
- 要搜索的任何元数据
curl -XGET 'http://127.0.0.1:9200/my_index/page/_search?pretty=1' -d '
{
"query" : {
"text" : {
"text" : "interesting keywords"
}
},
"highlight" : {
"fields" : {
"text" : {}
}
}
}
'
显示按“doc”分组的结果以及文本中的突出显示有点棘手。这不能用一个查询来完成,但是一个小小的客户端分组将使您达到目的。一种方法可能是:
步骤1:执行以下操作以查找其子项(“页面”)与查询最匹配的父项(“文档”):
curl -XGET 'http://127.0.0.1:9200/my_index/doc/_search?pretty=1' -d '
{
"query" : {
"top_children" : {
"query" : {
"text" : {
"text" : "interesting keywords"
}
},
"score" : "sum",
"type" : "page",
"factor" : "5"
}
}
}
步骤2:从上面的查询中收集“doc”id,并发出新的查询以从匹配的“page”文档中获取代码片段:
步骤3:在你的应用程序中,将上述查询结果按单据分组并显示
使用第二个查询的搜索结果,您已经拥有可以显示的页面全文。要移动到下一页,您只需搜索它:
curl -XGET 'http://127.0.0.1:9200/my_index/page/_search?pretty=1' -d '
{
"query" : {
"constant_score" : {
"filter" : {
"and" : [
{
"term" : {
"doc_id" : 1
}
},
{
"term" : {
"page" : 2
}
}
]
}
}
},
"size" : 1
}
'
或者,为“页面”文档提供一个由$doc\u ID\u$page\u num
组成的ID(例如123\u 2),然后您可以检索该页面:
curl -XGET 'http://127.0.0.1:9200/my_index/page/123_2
亲子关系:
通常,在ES(和大多数NoSQL解决方案)中,每个文档/对象都是独立的-没有真正的关系。通过在“文档”和“页面”之间建立父子关系,ElasticSearch确保子文档(即“页面”)存储在与父文档(“文档”)相同的切分上
这使您能够运行,它将根据“页面”的内容找到最佳匹配的“文档”。将内容存储在数据库中有什么好处?提取内容(假设您不只是使用Solr并跳过手动处理)、为其编制索引并丢弃纯文本内容不是更容易吗?好吧。。。我得回去看看密码
curl -XGET 'http://127.0.0.1:9200/my_index/page/123_2