2015-07-28 22 views
0

我有一个Java客户机,它允许在本地ElasticSearch服务器上索引文档。 我现在想要构建一个简单的Web UI,允许用户通过在表单中​​键入一些文本来查询ES索引。在调用ElasticSearch API之前预处理输入文本

我的问题是,在调用ES API发出查询之前,我想通过调用一些Java代码来预处理用户输入。

什么是最简单和“最干净”的方式来实现这一目标?

  • 我应该创建自己的API,以便UI可以访问我的Java代码吗?
  • 我应该用JSP构建UI,以便我可以直接调用我的Java 代码吗?
  • 可以在执行查询之前以某种方式使ElasticSearch执行我的Java代码之前 ? (?也许通过创建我自己的ElasticSearch插件)

回答

0

最后,我选择了使用基于JSON的RESTful API中的简单的解决方案。时间证明这是相当灵活和有效的我的情况,所以我想我应该分享:

  1. 我的Java代码暴露了其运行的HTTP服务器和响应客户端请求与查询的ElasticSearch指数,能力Json格式的ES结果。我使用sun.net.HttpServer创建了带有几行代码的HTTP服务器。有更严重/复杂的HTTP服务器(例如Tomcat),但这是非常迅速采用,并要求零配置头痛。
  2. 我的Web UI向Java服务器发出HTTP GET请求,接收Json格式的数据并愉快地使用它。我的UI是用PHP实现的,但任何Web语言都可以完成这项工作,只要您可以发出HTTP请求即可。

这个解决方案在我的情况下效果很好,因为它允许不依赖ES插件。我可以在调用ES之前做任何类型的预处理,甚至在发送结果返回给UI之前,甚至后处理 ES输出。

0

根据前处理的类型,你可以创建一个Elasticsearch插件自定义分析或自定义过滤器:你基本上扩展了相应的Lucene类(ES)和包一切都变成了Elasticsearch插件。加载插件后,您可以配置自定义分析器并将其应用于相关字段。 Elasticsearch中已经有很多分析器和过滤器可用,所以在编写自己的代码之前,您可能需要先看看这些分析器和过滤器。

Elasticsearch插件:https://www.elastic.co/guide/en/elasticsearch/reference/1.6/modules-plugins.html

定义自定义分析仪(末知的插件列表):https://www.elastic.co/guide/en/elasticsearch/guide/current/custom-analyzers.html

+0

感谢您的帮助。最后,我选择了简单的RESTful API http://stackoverflow.com/a/35923855/2091700 – Alphaaa