私はElasticsearch、特にElasticsearchのJava APIに問題があります。弾性検索親フィールドは指定できません
私はそれぞれのJava APIの助けによって作成されたElasticsearchインスタンスを実行するPlayアプリケーションを持っています。アプリケーションの起動時に、Elasticsearchインデックスが作成されます。この索引は、ランタイム中のデータ処理に使用されます。 Macでアプリケーションをローカルに実行すると(Windowsでも動作します)、すべてがスムーズに動作しています。しかし、アプリケーションを仮想マシン(現在はUbuntuに、Windowsでも試しましたが)にデプロイするとすぐに、私は奇妙な問題に直面します。アプリケーションが起動し、Elasticsearchサーバーをセットアップし、インデックスを作成します(正しくはありません)。あなたに私は、関連するコードスニペットを付けるだけでなく、すぐに説明したいインデックスの構造についてのより良いアイデアを与えるために
java.lang.IllegalArgumentException: Can't specify parent if no parent field has been configured
at org.elasticsearch.action.index.IndexRequest.process(IndexRequest.java:617)
at org.elasticsearch.action.index.TransportIndexAction.resolveRequest(TransportIndexAction.java:131)
at org.elasticsearch.action.support.replication.TransportReplicationAction$PrimaryPhase.checkBlocks(TransportReplicationAction.java:411)
at org.elasticsearch.action.support.replication.TransportReplicationAction$PrimaryPhase.doRun(TransportReplicationAction.java:367)
at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37)
at org.elasticsearch.action.support.replication.TransportReplicationAction.doExecute(TransportReplicationAction.java:120)
at org.elasticsearch.action.index.TransportIndexAction.innerExecute(TransportIndexAction.java:135)
at org.elasticsearch.action.index.TransportIndexAction.doExecute(TransportIndexAction.java:119)
at org.elasticsearch.action.index.TransportIndexAction.doExecute(TransportIndexAction.java:66)
at org.elasticsearch.action.support.TransportAction.execute(TransportAction.java:70)
at org.elasticsearch.client.node.NodeClient.doExecute(NodeClient.java:58)
at org.elasticsearch.client.support.AbstractClient.execute(AbstractClient.java:347)
at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:85)
at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:59)
at org.elasticsearch.action.ActionRequestBuilder.get(ActionRequestBuilder.java:67)
at util.ElasticsearchServer.insert(ElasticsearchServer.java:83)
at models.Article.saveEntityElasticsearch(Article.java:349)
at models.Entity.saveEntity(Entity.java:26)
at controllers.ImportController.saveArticleContainers2AndArticles2(ImportController.java:119)
at controllers.ImportController.saveArticleContainers2AndArticles2(ImportController.java:116)
at controllers.ImportController.importGermanLaws(ImportController.java:100)
at Routes$$anonfun$routes$1$$anonfun$applyOrElse$47$$anonfun$apply$47.apply(routes_routing.scala:1060)
at Routes$$anonfun$routes$1$$anonfun$applyOrElse$47$$anonfun$apply$47.apply(routes_routing.scala:1060)
at play.core.Router$HandlerInvokerFactory$$anon$4.resultCall(Router.scala:264)
at play.core.Router$HandlerInvokerFactory$JavaActionInvokerFactory$$anon$15$$anon$1.invocation(Router.scala:255)
at play.core.j.JavaAction$$anon$1.call(JavaAction.scala:55)
at play.GlobalSettings$1.call(GlobalSettings.java:67)
at play.core.j.JavaAction$$anonfun$11.apply(JavaAction.scala:82)
at play.core.j.JavaAction$$anonfun$11.apply(JavaAction.scala:82)
at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24)
at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24)
at play.core.j.HttpExecutionContext$$anon$2.run(HttpExecutionContext.scala:40)
at play.api.libs.iteratee.Execution$trampoline$.execute(Execution.scala:46)
at play.core.j.HttpExecutionContext.execute(HttpExecutionContext.scala:32)
at scala.concurrent.impl.Future$.apply(Future.scala:31)
at scala.concurrent.Future$.apply(Future.scala:485)
at play.core.j.JavaAction$class.apply(JavaAction.scala:82)
at play.core.Router$HandlerInvokerFactory$JavaActionInvokerFactory$$anon$15$$anon$1.apply(Router.scala:252)
at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4$$anonfun$apply$5.apply(Action.scala:130)
at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4$$anonfun$apply$5.apply(Action.scala:130)
at play.utils.Threads$.withContextClassLoader(Threads.scala:21)
at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4.apply(Action.scala:129)
at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4.apply(Action.scala:128)
at scala.Option.map(Option.scala:145)
at play.api.mvc.Action$$anonfun$apply$1.apply(Action.scala:128)
at play.api.mvc.Action$$anonfun$apply$1.apply(Action.scala:121)
at play.api.libs.iteratee.Iteratee$$anonfun$mapM$1.apply(Iteratee.scala:483)
at play.api.libs.iteratee.Iteratee$$anonfun$mapM$1.apply(Iteratee.scala:483)
at play.api.libs.iteratee.Iteratee$$anonfun$flatMapM$1.apply(Iteratee.scala:519)
at play.api.libs.iteratee.Iteratee$$anonfun$flatMapM$1.apply(Iteratee.scala:519)
at play.api.libs.iteratee.Iteratee$$anonfun$flatMap$1$$anonfun$apply$14.apply(Iteratee.scala:496)
at play.api.libs.iteratee.Iteratee$$anonfun$flatMap$1$$anonfun$apply$14.apply(Iteratee.scala:496)
at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24)
at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24)
at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:41)
at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:393)
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
:私は新しい文書を作成したい場合は今、私は次のエラーを受け取りますセットアップ。
私のトップエンティティはある種のドキュメントです。マッピングはかなりシンプルで、いくつかのフィールドがあります。次のエンティティは「ArticleContainer」です。無関係ないくつかのフィールドの他に、 "Law"という1つのフィールドがあります。このフィールドには、そのドキュメントのIDが含まれます。また、私は "記事"を持っています。他のフィールドの中で、Articleは "ArticleContainer"タイプの "_parent"フィールドを持ち、したがって "ArticleContainer"の子です。最後のエンティティは「注釈」です。これはやはり「記事」の子であり、したがって「記事」タイプのフィールド「_parent」を有する。ここで
は、インデックスを作成するコードです:
private static void createIndex() {
client.admin().indices().prepareCreate(indexName).execute().actionGet();
String mappingArticle = null;
String mappingAnnotation = null;
String mappingArticleContainer = null;
try {
mappingArticle = XContentFactory.jsonBuilder().startObject().startObject(Article.SC_TYPE).startObject("_parent").field("type", ArticleContainer.SC_TYPE).endObject().startObject("_routing").field("required", true).endObject().startObject("properties").startObject("ArticleContent").field("type", "string").endObject().endObject().endObject().endObject().string();
mappingAnnotation = XContentFactory.jsonBuilder().startObject().startObject(Annotation.SC_TYPE).startObject("_parent").field("type", Article.SC_TYPE).endObject().startObject("_routing").field("required", true).endObject().startObject("properties").startObject("feature").field("type", "nested").endObject().startObject("AnnotationType").field("type", "string").field("index", "not_analyzed").endObject().startObject("Content").field("type", "string").field("index", "not_analyzed").endObject().endObject().endObject().endObject().string();
mappingArticleContainer = XContentFactory.jsonBuilder().startObject().startObject(ArticleContainer.SC_TYPE).startObject("properties").startObject("ParentArticleContainer").field("type", "string").field("index", "not_analyzed").endObject().startObject(Law.SC_TYPE).field("type", "string").field("index", "not_analyzed").endObject().startObject(DraftedDocument.SC_TYPE).field("type", "string").field("index", "not_analyzed").endObject().startObject(Patent.SC_TYPE).field("type", "string").field("index", "not_analyzed").endObject().endObject().endObject().endObject().string();
} catch (IOException e) {
e.printStackTrace();
}
client.admin().indices().preparePutMapping(indexName).setType(Annotation.SC_TYPE).setSource(mappingAnnotation).execute().actionGet();
client.admin().indices().preparePutMapping(indexName).setType(Article.SC_TYPE).setSource(mappingArticle).execute().actionGet();
client.admin().indices().preparePutMapping(indexName).setType(ArticleContainer.SC_TYPE).setSource(mappingArticleContainer).execute().actionGet();
}
奇妙な部分は、私はちょうどPlayアプリケーションを実行すると、それはローカルで動作していることを、すでに述べたように、です。私は任意のヘルプやヒントをいただければと思いVM上の生産バージョンのために、私は
play dist
と分布を構築し、
/var/lib/jenkins/jobs/MyApp/bin/myApp -Dhttp.port=3000 -Dhttp.address=0.0.0.0 -Dpidfile.path=/var/lib/jenkins/jobs/MyApp/myApp.pid -Dplay.crypto.secret=mysecret
でそれを開始します!