为弹性搜索创建了一个包装器。它作为Java应用程序运行时工作正常。 但是当我创建OSGI包时,它会抛出一个错误。
org.elasticsearch.env.FailedToResolveConfigException: Failed to resolve config path [names.txt], tried file path [names.txt], path file [/home/local/PAYODA/sidharthan.r/config/names.txt], and classpath
at org.elasticsearch.env.Environment.resolveConfig(Environment.java:207)
at org.elasticsearch.node.internal.InternalSettingsPreparer.prepareSettings(InternalSettingsPreparer.java:118)
at org.elasticsearch.client.transport.TransportClient.<init>(TransportClient.java:154)
at org.elasticsearch.client.transport.TransportClient.<init>(TransportClient.java:120)
at com.payoda.commons.elasticsearch.util.GenericEsSearch.getES(GenericEsSearch.java:54)
请帮帮我.. 我正在使用ES版本0.90.10
答案 0 :(得分:3)
正如您在Environment.resolveConfig()
(抛出异常的那个)的实现中所看到的,它使用settings.getClassLoader().getResource(path)
来解析文件。默认设置是使用使用Classes.getDefaultClassLoader()
的{{1}}。作为&#39; names.txt&#39;在elasticsearch * .jar中,org.elasticsearch。*类中的任何ClassLoader都可以:
Thread.getContextClassLoader()
或者,您可以将自己的names.txt文件放在当前工作目录或config目录中(&#39; path.conf&#39;设置或$ home / config默认情况下,$ home为值默认情况下,路径设置或&#39; user.dir&#39;系统属性。
顺便说一下,我自己做了一些弹性搜索和OSGI的实验,所以也许molindo-elasticsync会有所帮助。此外,elasticsearch bundles provided by Servicemix可能会有所帮助。
答案 1 :(得分:0)
将names.txt文件放在bundle.you中,可以在elasticsearch.jar.Add中找到names.txt文件,然后在下面的代码中创建客户端实例。
Thread.currentThread().setContextClassLoader(*classname*.class.getClassLoader());
Builder settings = ImmutableSettings.settingsBuilder().put("cluster.name", esHosts);
settings.put("path.conf", path_of_names.txt);
TransportClient transportClient = new TransportClient(settings);
我在class_path中添加了2个jar,它们是elasticsearch.jar,lucene.jar。 jars的版本必须与Elasticsearch的版本相同。
现在它就像魅力一样......