当前位置: 首页 > 知识库问答 >
问题:

无法使用设置和源代码创建索引JavaAPI

松霖
2023-03-14

使用JavaAPI设置源和设置的唯一方法是使用这样的代码(这是一个只有一个@test方法的简单测试类):

   @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();
    }
}

当我第一次运行它时,它就起作用了。但当我第二次运行它时,我得到:

JAVAlang.IllegalStateException:未能加载ApplicationContext

allable.java:12DefaultCacheAware ContextLoaderDorg.springframework.test.context.junitContext(DefaultCacheAware ContextLoaderDunner.method)在unner.java:289DefaultTestCorg.springframework.test.context.junitApplication Context(DefaultTestCunner.run)在unner.java:247AutoConfigreReportTestExecutionLorg.springframework.test.context.junitTestInstance(AutoConfigreportTestExecutionListener.java:49)在org.springframework.test.context.TestContextManager.prepareTestContextManager.java:230)在org.springframework.test.context.junit4。SpringJUnit4ClassRunner.create测试(SpringJUnit4ClassRunner.java:228)在org.springframework.test.context.junit4。SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:287)在org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCorg.springframework.test.context.cache.)在elegate.load4。SpringJUnit4ClassRelegate.java:124块(SpringJUnit4ClassRorg.springframework.test.context.support.)在ontext.get4。SpringJUnit4ClassRontext.java:83孩子(SpringJUnit4ClassRorg.springframework.boot.test.autoconfigure.)在istener.prepare4。SpringJUnitJUnit4IdeaTestRunner. start Runnerwith Args(JUnit4IdeaTestRunner. java: 117)at com. intellij. rt.执行. java。JUnitStarter. preareStreamsAndStart(JUnitStarter. java: 234)at com. intellij. rt.执行. java。JUnitStarter. main(JUnitStarter. java: 74)at sun.反射。sun.反射中的NativeMethod odAccessorInp.调用0(本机方法)。在sun.反射中的NativeMethod odAccessorInp. Invoke(NativeMethod odAccessorInp. java: 62)。在java. lang.反射中委托方法访问。在com. intellij. rt.执行.应用程序中调用方法(Method. java: 498)。AppMain. main(AppMain. java:BeanCreationException:创建名称为“bookRepository”的bean时出错:初始化方法调用失败;嵌套异常是org. springframe. bean。BeanInstantiationException:无法实例化[org. springframe. data. elasticsearch. repository. support。SimpleElasticsearch chRepository]:构造函数抛出异常;嵌套异常是java. lang。IllegalArgumentException:[title]的Mapper与其他类型的现有映射冲突:[mapper[title]在org. springframe. bean. factory. annotation.上有不同的[store]值。AutowiredAnnotationBeanPostProcencer$AutowiredMethod odElement.注入

为什么当我第二次运行这个时,这似乎是个问题?

如何使用创建索引和添加两个示例性文档:

>

  • 碎片nr
  • 副本nr
  • 索引名称
  • 索引类型
  • 新文档id。

    使用Java API?

  • 共有1个答案

    昌乐生
    2023-03-14

    这里没有足够的代码来轻松解释这个问题,但是您有一个名为“bookRepository”的存储库类,它可能被设置为自动配置。存储库不会被删除,所以当您第二次(第二次运行)重新创建索引时,它会将“book”类(假设)与现有ES索引的模式进行比较,并且您可能对标题字段进行了更改。

    您最好手动清除books索引(我认为这并不重要,因为上面的代码中有一个delete),然后查看是否连续运行两次应用程序(您的测试用例)仍然失败。

     类似资料:
    • 相比于从前的 (S)FTP 时代,在这个 “Build, Ship, Run” 的时代,我们已经不再需要像以前那样手动地将代码上传到每一个生产环节然后手动启动程序了。借助拥有多年经验沉淀的版本管理工具(如 Git、SVN 等),我们只需要将代码交由代码托管平台进行管理,然后通过 Docker 等容器技术进行代码构建、发布和部署,将从前繁琐的工作自动化,变得井井有条。 DaoCloud 提供了利用

    • 我的Spring启动应用程序正在使用CouchBase5.1社区。 我的应用程序需要一个主要索引和几个次要索引。 我正在寻找一种通过代码自动完成的方法,所以当应用程序启动时,它将检查索引是否丢失,并在需要时创建它们。 有没有办法通过Spring数据或Couchbase客户机来实现?

    • CreateIndexes 根据struct中的tag来创建索引 CreateUniques 根据struct中的tag来创建唯一索引

    • 我在data hub/src/main/ml config/database fields/final-database.xml中添加了几个元素范围索引 并运行./gradlew mlDeploy-PenvironmentName=local--info 它成功运行,但没有创建添加到xml中的元素范围索引。 MarkLogic版本10.0.3数据中心版本5.1 是否不支持此xml配置? 我怎样才能

    • 我正在使用java高级rest客户端在我的应用程序中集成elasticsearch,但无法创建索引 在某个地方,我发现要执行请求,我们需要使用index(请求)方法(我在代码中已注释),但它表明index(请求)方法已从RestHighLevelClient类型中弃用。 这是我的代码:

    • 我用几个参数创建了自己的流程图块。其中两个是“代理”类型,我主要选择了相应的代理。我的块所做的是,它根据进入块的代理创建新的代理(有点像批处理块)。 到目前为止,我能够验证传入的代理,以确保在Main中选择了正确的代理类型。现在我想创建另一个带有源块和注入功能的代理。但是我的问题来了。我想根据选择的参数(类型代理)动态地创建代理。显然,在新代理字段中只输入参数的名称是行不通的(它确实有效,但只适用