我正在研究使用DataImportHandler来导入我的数据文件 FileDataSource与FileListEntityProcessor有几个问题 在我开始之前,我希望你们能帮忙。
1)我想在配置的本地文件系统上放置一个文件 位置并让Solr查看并处理文件而无需额外的努力 我这边。 这有可能吗?从我所看到的,这是不支持的 我必须手动调用一个URL(例如 http://foo/solr/dataimport?command=full-import)。 手动的,基于URL的调用方法似乎完全符合逻辑 面向数据库的世界,人们可以安排定期运行的更新 但在我的情况下,我有几个相同的索引,我和之间的负载平衡 不希望多次并行运行相同的重要查询。因此, 我正在做一个查询,将结果写入XML文件,推送该文件 到每个框,然后想要处理该文件。我想要这个过程 尽可能自动化。
2)我希望Solr处理的任何文件在被删除之后被删除 进口。我目前还没有看到任何办法。我以为我可能会 能够子类化,但FileListEntityProcessor,例如, 似乎没有在工作流中的正确时间给出任何句柄来删除 一份文件。还有其他我可以看的地方吗?
3)在阅读DIH文档时,我碰到了这句话:“什么时候 执行delta-import命令,它读取存储在 conf / dataimport.properties 中的开始时间。它使用该时间戳来运行增量查询和 完成后,更新 conf / dataimport.properties 中的时间戳。“如果 它真的确实将日期更新到完成日期,会发生什么 在开始日期和结束日期之间添加的文件?他们迷路了吗?
4)对于delta导入,我没有看到处理文件的排序方式 除此之外,它试图不重新导入早于上述文件的文件 conf / dataimport.properties文件。在订单重要的情况下,是吗? 按名称或创建日期订购文件或......?
答案 0 :(得分:1)
solr / lucene的想法不是作为数据库工作。这是一个索引。这意味着,它是一个数据索引,它可以在其他地方重新启动 - 无论是否有(索引和)存储solr / lucene数据的可能性,特殊功能(突出显示等)。 因此,在导入后没有开箱即可添加单个文档和删除这些文档的可能性。顺便说一下,最好将原始文档保存在数据库,文件系统等中。可能你保留原始文件,但不能保存在solr / lucene服务器上?!
基于URL的调用方法在面向数据库的世界中似乎是完全合乎逻辑的,人们可能会安排定期运行更新,但在我的情况下,我有几个相同的索引,我在它们之间进行负载平衡,并且不希望运行相同的多次并行查询。
您可以定义操作系统预定作业(cronjob)以启动增量导入。
我希望Solr处理的任何文件在导入后都会被删除
我从未听说过,solr能够做到这一点。 正如我上面所写的,这个想法是,solr是一个存储在其他地方的数据索引。所以DIH期望数据/所有文件都在“someherehere”。如果从“somewehere”中删除原始文档并更新索引,则目标是将索引内容与(现在)可用文档同步...
他们迷路了吗?
没有。
it reads the start time stored in conf/dataimport.properties. It uses that timestamp to run delta queries and after completion, updates the timestamp in conf/dataimport.properties."
Solr reads the start time
,运行delta queries and
(...如果完成,solr ...)updates
(...开始时间......)为{{ 1}}
是按名称或创建日期订购文件还是......?
不确定,但我认为它从文件系统
按给定顺序读取文件答案 1 :(得分:0)
Erick Erickson对Solr邮件列表的回复非常好:
http://mail-archives.apache.org/mod_mbox/lucene-solr-user/201109.mbox/browser
以下具体回复,但我会认真考虑 正在编写我自己的文件系统感知钩子 文档到已知的Solr服务器而不是使用 DIH拉他们。你可以使用来自的代码 FileSystemEntityProcessor作为基础并从那里开始。 FileSystemEntityProcessor实际上并不打算这样做 做非常复杂的事情......
1>不要以为这是可能的OOB。没有内置的东西 DIH放入文件系统挂钩并自动尝试索引 它....
2 - ;不。 DIH非常简单 FileListEntityProcessor。
3>我很确定这与FileSystemEntityProcessor无关, 它真的用于数据库导入。
4> “无论Java返回什么顺序”。看看吧 FileListEntityProcessor代码,但相关位在下面。 因此,排序是Java所做的任何我不知道的事情 什么,如果有的话,保证。
private void getFolderFiles(File dir, final List<Map<String,Object>> fileDetails) {
// Fetch an array of file objects that pass the filter, however the
// returned array is never populated; accept() always returns false.
// Rather we make use of the fileDetails array which is populated as
// a side affect of the accept method.
dir.list(new FilenameFilter() {
public boolean accept(File dir, String name) {
File fileObj = new File(dir, name);
if (fileObj.isDirectory()) {
if (recursive) getFolderFiles(fileObj, fileDetails);
} else if (fileNamePattern == null) {
addDetails(fileDetails, dir, name);
} else if (fileNamePattern.matcher(name).find()) {
if (excludesPattern != null && excludesPattern.matcher(name).find())
return false;
addDetails(fileDetails, dir, name);
}
return false;
}
});
}