集成Lucene Index和Amazon AWS

时间:2016-08-07 18:07:10

标签: java amazon-web-services amazon-s3 lucene aws-lambda

我有一个现有的lucene索引文件索引和用于执行搜索功能的java代码。

我想要做的是在服务器上执行相同的操作,以便应用程序的用户可以简单地传递一个查询,该查询将被java程序作为输入参数,并针对现有索引运行它以返回文档它发生的地方。

所有的实现都已在我的本地电脑上测试过,但我需要做的是在Android应用中实现它。

到目前为止,我已阅读并总结了在AWS lambda中移植代码并使用S3存储文件并从lambda调用s3对象。

这是正确的方法吗?任何指向这种方法或其他建议的资源也会受到赞赏。

提前致谢。

3 个答案:

答案 0 :(得分:3)

每当您的Android应用向AWS Lambda发送请求时(我假设通过AWS API网关),Lambda函数必须将整个索引文件从S3下载到Lambda / tmp目录(其中Lambda具有{{3} })然后对该索引文件执行搜索。这似乎非常低效,并且取决于索引文件的大​​小,它可能执行得非常糟糕,甚至可能不适合Lambda上可用的空间。

我建议调查512MB limit。这是一个完全托管的搜索引擎服务,基于Lucene,您应该可以直接从Android应用程序进行查询。

答案 1 :(得分:0)

由于您已在S3中拥有索引文件,因此可以指示您的Lucene Index阅读器指向S3上的位置。

String index = "/<BUCKET_NAME>/<INDEX_LOCATION>/";
String endpoint = "s3://s3.amazonaws.com/";
Path path = new com.upplication.s3fs.S3FileSystemProvider().newFileSystem(URI.create(endpoint), env).getPath(index);
IndexReader reader = DirectoryReader.open(FSDirectory.open(path))

您可以在env中传递客户端凭据,也可以将角色分配给Lambda函数。

价: https://github.com/prathameshjagtap/aws-lambda-s3-index-search/blob/master/lucene-s3-searcher/src/com/printlele/SearchFiles.java

答案 2 :(得分:0)

对于小于512MB的Lucene索引,您可以尝试使用lucene-s3directory

就像Mark所说的那样,在/tmp上,AWS Lambda上的内存限制为512MB。我认为拥有完全无服务器的搜索服务是非常可取的,但是在此限制消失之前,我们一直将EC2用于生产部署。一旦在EC2上运行Lucene,一旦可以访问EBS或临时存储,就将索引存储在S3上变得毫无意义。

如果您想尝试S3Directory,请按以下步骤操作:

S3Directory dir = new S3Directory("my-lucene-index");
dir.create();
// use it in your code in place of FSDirectory, for example
dir.close();
dir.delete();