设置源和设置使用Java API的唯一方法是使用这样的代码(这是一个简单的测试类只有一个@Test法):没有办法来创建设置和源的Java API指数
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
@TestPropertySource(value = "classpath:testApplication.properties")
public class ESJavaAPITests {
@Value("${ES.cluster.name}")
private String CLUSTER_NAME;
@Value("${ES.host}")
private String HOSTNAME;
@Value("${ES.port}")
private Integer HOST_PORT;
private static final String BOOK_INDEX_NAME ="bookshop";
private static final String BOOK_TYPE_NAME ="book";
private Client client(){
Settings settings = Settings.settingsBuilder()
.put("cluster.name", CLUSTER_NAME)
.build();
return new TransportClient.Builder().settings(settings).build()
.addTransportAddress(
new InetSocketTransportAddress(
new InetSocketAddress(HOSTNAME, HOST_PORT))
);
}
@Test
public void shouldSaveDocToPredefinedShard() throws IOException {
//delete all indexes if any
client().admin().indices().prepareDelete("_all").get();
CreateIndexResponse createIndexRequestBuilder = client().admin().indices()
.prepareCreate(BOOK_INDEX_NAME)
.setSettings(
Settings.settingsBuilder()
.put("index.number_of_shards", 2)
.put("index.number_of_replicas", 2)
)
.execute()
.actionGet();
IndexResponse response1 = client().prepareIndex(BOOK_INDEX_NAME, BOOK_TYPE_NAME, "id1")
.setSource(XContentFactory.jsonBuilder()
.startObject()
.field("title", "Clean COde")
.field("author", "John Smith")
.endObject()
)
.setRouting("route1")
.get();
IndexResponse response2 = client().prepareIndex(BOOK_INDEX_NAME, BOOK_TYPE_NAME, "id2")
.setSource(XContentFactory.jsonBuilder()
.startObject()
.field("title", "Learn Scala")
.field("author", "John Doe")
.endObject()
)
.setRouting("route2")
.get();
}
}
这个工程,当我第一次运行它。但是,当我运行它的第二次我得到:
java.lang.IllegalStateException:无法加载ApplicationContext的
在 org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate。的java:124) 在 org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83) 在 org.springframework.boot.test.autoconfigure.AutoConfigureReportTestExecutionListener.prepareTestInstance(AutoConfigureReportTestExecutionListener.java:49) 在 org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:230) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228)在 org.springframework。 test.context.junit4.SpringJUnit4ClassRunner $ 1.runReflectiveCall(SpringJUnit4ClassRunner.java:287) 在 org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 在 org.springframework.test.context .junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:289) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:247) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94) 处 org.junit.runners org.junit.runners.ParentRunner $ 3.run(ParentRunner.java:290)。 ParentRunner $ 1.schedule(ParentRunner.java:71)at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)at org.junit.runners.ParentRunner.access $ 000(ParentRunner.java:58)at org.junit.runners.ParentRunner $ 2.evaluate(ParentRunner.java:268)在 org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) 在 org.springframework.test。 context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallba cks.java:70) 在org.junit.runners.ParentRunner.run(ParentRunner.java:363)在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191) 在有机junit.runner.JUnitCore.run(JUnitCore.java:137)在 com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:117) 在 com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter的.java:234) 在 com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:74) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)在 sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) a t sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498)at com.intellij.rt.execution.application.AppMain.main( AppMain.java:144) 引起者: org.springframework.beans.factory。UnsatisfiedDependencyException: 创建名为'bookServiceImpl'的Bean时出错:不满意 通过方法'setBookRepository'参数表示的依赖关系0: 创建名为'bookRepository'的bean时出错:初始化的调用 方法失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:失败 实例化 [org.springframework.data.elasticsearch.repository.support.SimpleElasticsearchRepository]: 构造函数抛出异常;嵌套异常是 java.lang.IllegalArgumentException:Mapper for [title]与 存在冲突,其他类型存在:[mapper [title]有不同的[store] values];嵌套的异常是 org.springframework.beans.factory.BeanCreationException:错误 创建名为'bookRepository'的bean:调用init方法 失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:失败 实例化 [org.springframework.data.elasticsearch.repository.support.SimpleElasticsearchRepository]: 构造函数抛出异常;嵌套的异常是 java.lang.IllegalArgumentException异常:映射器为[标题]与其它类型的 现有映射冲突:在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor [映射器[标题]具有不同[存储] 值] $ AutowiredMethodElement.inject
为什么这似乎是一个问题,当我第二次运行这个?
如何创建索引,并添加使用两个示范文件:
- 碎片NR
- 副本NR
- 指数名称
- 指数型
新的文件编号。
与Java API?