标签: elasticsearch-java-api

使用ElasticSearch的script_upsert创建文档

根据官方文档Update API-Upserts,可以使用scripted_upsert该脚本处理脚本中的更新(对于现有文档)或插入(对于新文档)表格。问题是它们从不显示脚本应如何执行此操作。在爪哇-更新API没有对ScriptUpsert用途的任何信息。

这是我正在使用的代码:

//My function to build and use the upsert
public void scriptedUpsert(String key, String parent, String scriptSource, Map<String, ? extends Object> parameters) {
    Script script = new Script(scriptSource, ScriptType.INLINE, null, parameters);
    UpdateRequest request = new UpdateRequest(index, type, key);
    request.scriptedUpsert(true);
    request.script(script);
    if (parent != null) {
        request.parent(parent);
    }
    this.bulkProcessor.add(request);
}

//A test call to validate the function
String scriptSource = "if (!ctx._source.hasProperty(\"numbers\")) {ctx._source.numbers=[]}";
Map<String, List<Integer>> parameters = new HashMap<>();
List<Integer> numbers = new …
Run Code Online (Sandbox Code Playgroud)

java upsert elasticsearch elasticsearch-java-api

5
推荐指数
1
解决办法
1403
查看次数

我可以在旧版本的 elasticsearch 上使用新版本的 java 高级 rest 客户端吗?

我们正在 AWS 上运行 elasticsearch,它目前支持作为最新版本的 elasticsearch 6.3。

我们有一个商业案例,我们需要更新索引中的所有文档并每天删除一个嵌套对象。有 Elasticsearch 的Update by query API可以解决我们的目的。

但是在我们的 Java 应用程序中,我们使用的是 Java 高级别的客户端。其余客户端版本 6.5支持按查询 api 更新。现在,如果我们将其余客户端升级到 6.5,我们还需要升级我们的 pom 中的 elasticsearch 版本。否则它们不兼容。

    <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>elasticsearch-rest-high-level-client</artifactId>
        <version>${elasticsearch.version}</version>
    </dependency>

    <dependency>
        <groupId>org.elasticsearch</groupId>
        <artifactId>elasticsearch</artifactId>
        <version>${elasticsearch.version}</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

那么我们可以在我们的java服务中将客户端和elasticsearch版本升级到6.5,并且仍然使用elasticsearch 6.3吗?我尝试了它并且它有效,但只是想彻底,因为我们不希望我们的数据被破坏。

编辑:更新查询也在6.3 中可用,但这个 api 使用旧的 Transportclient,它应该很快被弃用。

java elasticsearch elasticsearch-java-api

5
推荐指数
1
解决办法
2233
查看次数

java.lang.IllegalArgumentException:无法为 java.util.UUID 类型的未知值编写 xcontent?

嗨,我正在使用 java 高级 rest api 客户端从弹性搜索索引中读取一些文档,但出现以下错误。

当我在 elasticsearch 客户端上执行请求时出现此错误,如下所示。

elasticSearchClient.search(searchRequest, RequestOptions.DEFAULT);

java.lang.IllegalArgumentException: cannot write xcontent for unknown value of type class java.util.UUID
    at org.elasticsearch.common.xcontent.XContentBuilder.unknownValue(XContentBuilder.java:833)
    at org.elasticsearch.common.xcontent.XContentBuilder.value(XContentBuilder.java:804)
    at org.elasticsearch.common.xcontent.XContentBuilder.field(XContentBuilder.java:789)
    at org.elasticsearch.index.query.MatchQueryBuilder.doXContent(MatchQueryBuilder.java:371)
    at org.elasticsearch.index.query.AbstractQueryBuilder.toXContent(AbstractQueryBuilder.java:88)
    at org.elasticsearch.index.query.BoolQueryBuilder.doXArrayContent(BoolQueryBuilder.java:280)
    at org.elasticsearch.index.query.BoolQueryBuilder.doXContent(BoolQueryBuilder.java:261)
    at org.elasticsearch.index.query.AbstractQueryBuilder.toXContent(AbstractQueryBuilder.java:88)
    at org.elasticsearch.common.xcontent.XContentBuilder.value(XContentBuilder.java:857)
    at org.elasticsearch.common.xcontent.XContentBuilder.value(XContentBuilder.java:850)
    at org.elasticsearch.common.xcontent.XContentBuilder.field(XContentBuilder.java:842)
    at org.elasticsearch.search.builder.SearchSourceBuilder.innerToXContent(SearchSourceBuilder.java:1182)
    at org.elasticsearch.search.builder.SearchSourceBuilder.toXContent(SearchSourceBuilder.java:1309)
    at org.elasticsearch.common.xcontent.XContentHelper.toXContent(XContentHelper.java:353)
Run Code Online (Sandbox Code Playgroud)

以下是我的弹性搜索索引的内容。

curl -X GET "localhost:9200/mep-report-today/_search/?size=10"
{"took":9,"timed_out":false,"_shards":{"total":5,"successful":5,"skipped":0,"failed":0},"hits":{"total":100,"max_score":1.0,"hits":[{"_index":"mep-report-today","_type":"doc","_id":"k33fEW0B6qRb3bOs9s4M","_score":1.0,"_source":{"inventory":"SMS","msg_text":"This is random text","status":"ENROUTE","@timestamp":"2019-09-02T09:48:09.213Z","o_error":"","flight_id":"92348fa1-ca6c-456a-b3b2-85fba2d2deed","recipient":"420736408283","account_id":"a56f7e14-20f9-40e6-90c6-10604140ac5f","sender":"8800111","campaign_id":"6f2abca3-b46d-43f3-91be-3278a8dd7dc0","nof_segments":1,"@version":1,"submission_ts":1567681407000,"delivery_ts":1549246209000}},{"_index":"mep-report-today","_type":"doc","_id":"lH3fEW0B6qRb3bOs9s4M","_score":1.0,"_source":{"inventory":"SMS","msg_text":"This is random text","status":"ENROUTE","@timestamp":"2019-09-02T09:48:09.213Z","o_error":"","flight_id":"92348fa1-ca6c-456a-b3b2-85fba2d2deed","recipient":"420736408283","account_id":"a56f7e14-20f9-40e6-90c6-10604140ac5f","sender":"8800111","campaign_id":"6f2abca3-b46d-43f3-91be-3278a8dd7dc0","nof_segments":1,"@version":1,"submission_ts":1567681407000,"delivery_ts":1549246209000}},{"_index":"mep-report-today","_type":"doc","_id":"n33fEW0B6qRb3bOs9s4M","_score":1.0,"_source":{"inventory":"SMS","msg_text":"This is random text","status":"ENROUTE","@timestamp":"2019-09-02T09:48:09.213Z","o_error":"","flight_id":"92348fa1-ca6c-456a-b3b2-85fba2d2deed","recipient":"420736408283","account_id":"a56f7e14-20f9-40e6-90c6-10604140ac5f","sender":"8800111","campaign_id":"6f2abca3-b46d-43f3-91be-3278a8dd7dc0","nof_segments":1,"@version":1,"submission_ts":1567681407000,"delivery_ts":1549246209000}},{"_index":"mep-report-today","_type":"doc","_id":"oH3fEW0B6qRb3bOs9s4M","_score":1.0,"_source":{"inventory":"SMS","msg_text":"This is random text","status":"ENROUTE","@timestamp":"2019-09-02T09:48:09.213Z","o_error":"","flight_id":"92348fa1-ca6c-456a-b3b2-85fba2d2deed","recipient":"420736408283","account_id":"a56f7e14-20f9-40e6-90c6-10604140ac5f","sender":"8800111","campaign_id":"6f2abca3-b46d-43f3-91be-3278a8dd7dc0","nof_segments":1,"@version":1,"submission_ts":1567681407000,"delivery_ts":1549246209000}},{"_index":"mep-report-today","_type":"doc","_id":"oX3fEW0B6qRb3bOs9s4M","_score":1.0,"_source":{"inventory":"SMS","msg_text":"This is random text","status":"ENROUTE","@timestamp":"2019-09-02T09:48:09.213Z","o_error":"","flight_id":"92348fa1-ca6c-456a-b3b2-85fba2d2deed","recipient":"420736408283","account_id":"a56f7e14-20f9-40e6-90c6-10604140ac5f","sender":"8800111","campaign_id":"6f2abca3-b46d-43f3-91be-3278a8dd7dc0","nof_segments":1,"@version":1,"submission_ts":1567681407000,"delivery_ts":1549246209000}},{"_index":"mep-report-today","_type":"doc","_id":"on3fEW0B6qRb3bOs9s4N","_score":1.0,"_source":{"inventory":"SMS","msg_text":"This is random text","status":"ENROUTE","@timestamp":"2019-09-02T09:48:09.213Z","o_error":"","flight_id":"92348fa1-ca6c-456a-b3b2-85fba2d2deed","recipient":"420736408283","account_id":"a56f7e14-20f9-40e6-90c6-10604140ac5f","sender":"8800111","campaign_id":"6f2abca3-b46d-43f3-91be-3278a8dd7dc0","nof_segments":1,"@version":1,"submission_ts":1567681407000,"delivery_ts":1549246209000}},{"_index":"mep-report-today","_type":"doc","_id":"pH3fEW0B6qRb3bOs9s4N","_score":1.0,"_source":{"inventory":"SMS","msg_text":"This is random text","status":"ENROUTE","@timestamp":"2019-09-02T09:48:09.213Z","o_error":"","flight_id":"92348fa1-ca6c-456a-b3b2-85fba2d2deed","recipient":"420736408283","account_id":"a56f7e14-20f9-40e6-90c6-10604140ac5f","sender":"8800111","campaign_id":"6f2abca3-b46d-43f3-91be-3278a8dd7dc0","nof_segments":1,"@version":1,"submission_ts":1567681407000,"delivery_ts":1549246209000}},{"_index":"mep-report-today","_type":"doc","_id":"rn3fEW0B6qRb3bOs9s4N","_score":1.0,"_source":{"inventory":"SMS","msg_text":"This is random text","status":"ENROUTE","@timestamp":"2019-09-02T09:48:09.213Z","o_error":"","flight_id":"92348fa1-ca6c-456a-b3b2-85fba2d2deed","recipient":"420736408283","account_id":"a56f7e14-20f9-40e6-90c6-10604140ac5f","sender":"8800111","campaign_id":"6f2abca3-b46d-43f3-91be-3278a8dd7dc0","nof_segments":1,"@version":1,"submission_ts":1567681407000,"delivery_ts":1549246209000}},{"_index":"mep-report-today","_type":"doc","_id":"t33fEW0B6qRb3bOs9s4N","_score":1.0,"_source":{"inventory":"SMS","msg_text":"This …
Run Code Online (Sandbox Code Playgroud)

elasticsearch elasticsearch-java-api

5
推荐指数
1
解决办法
3438
查看次数

Elasticsearch Java Api:将字段设置为 _id

我想问一下唯一字段_id是否由文档中的某个字段分配。我看到 Rest,它可以通过path以下方式实现:

{
  "tweet": {
    "_id": {
      "path": "post_id"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

但是如果我想用java API来做,有什么办法可以实现吗?

Map<String, Object> MapA= new HashMap<String, Object>();
MapA=MapProcessor(MapA);

client.prepareIndex("index","type").setSource(MapA).execute().actionGet();
Run Code Online (Sandbox Code Playgroud)

如何修改我的代码以分配 Map 中的某些字段成为_id这种类型?

elasticsearch elasticsearch-java-api

4
推荐指数
1
解决办法
2474
查看次数

如何使用Java在Elasticsearch中进行多重过滤查询?

我已经在Elasticsearch之上构建了一个Web应用程序。我想使用Java进行多重过滤。

Elasticsearch查询:

{
  "query": {
    "bool": {
      "must": [
        {"match": {
          "T": "TEXT"},
          "match": {
            "new_content": "TEXT"
          }
        },

      ],
      "filter": {
        "term": {
          "collection1": "xyz"
        },
        "term": {
          "collection2": "abc"
        }
Run Code Online (Sandbox Code Playgroud)

我想过滤查询,以便它应该在collection具有两个不同值(例如“ xyz”和“ abc”)的同一字段上进行过滤

现在,我已经为单个过滤器编写了Java程序。

BoolQueryBuilder boolQuery = QueryBuilders.boolQuery()
                .must(QueryBuilders.simpleQueryStringQuery(query).field("newContent").field("T"))
                .filter(QueryBuilders.termQuery(Collection1, "abc"));
Run Code Online (Sandbox Code Playgroud)

如何在同一字段上为多个值过滤查询?

编辑

实际上,在我的Web应用程序中,我将集合的值提取为:

String[] Collection=request.getParameterValues("site");
Run Code Online (Sandbox Code Playgroud)

收藏是我的Elasticsearch文档中的字段。假设Collection[0]是germany_collection(value:true),Collection[1]是usa_collection(value:true)。我想写一个查询来过滤我的文档,以便在germany_collection:true和usa_collection:true时得到结果。

这是我的原始程序:

public StringBuffer getJson(String query, String start, String [] Collection{
Client client = TransportClient.builder().build()
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));

        BoolQueryBuilder boolQuery = QueryBuilders.boolQuery()
                .must(QueryBuilders.simpleQueryStringQuery(query).field("newContent").field("T"))
                .filter(QueryBuilders.termQuery(Collection[0], "true").filter(QueryBuilders.termQuery(Collection[1], …
Run Code Online (Sandbox Code Playgroud)

elasticsearch elasticsearch-java-api

4
推荐指数
1
解决办法
5836
查看次数

如何使用Elastic Java Api而不是纯REST构建类型设置为"phrase_prefix"的多匹配查询

根据多匹配查询(https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-multi-match-query.html)的文档,可以通过前缀搜索多个属性.您所要做的就是将参数"type"设置为"phrase_prefix".不幸的是,我无法在Elastic Java Api中找到该选项(https://www.elastic.co/guide/en/elasticsearch/client/java-api/1.6/multimatch.html).我尝试过类似的东西:

QueryBuilder builder = QueryBuilders
    .multiMatchQuery("query", "property1", "property2");
Run Code Online (Sandbox Code Playgroud)

但无法找到设置"类型"参数的位置.我知道纯粹的休息是解决方案,但我只限于java api.

我正在使用org.elasticsearch.client:transport的5.2.2版.

java elasticsearch elasticsearch-java-api

4
推荐指数
1
解决办法
2693
查看次数

Elasticsearch 6.0.1 NoSuchFieldError:LUCENE_6_0_0

我正在使用elasticsearch 6.0.1并在BulkRequest request = new BulkRequest();上 我收到以下错误。我已经在线检查过,大多数人说如果我在类路径中有不同版本的lucene jar,就会发生这种情况。

java.lang.NoSuchFieldError: LUCENE_6_0_0

at org.elasticsearch.Version.<clinit>(Version.java:44)
at org.elasticsearch.common.logging.DeprecationLogger.<clinit>(DeprecationLogger.java:159)
at org.elasticsearch.action.bulk.BulkRequest.<clinit>(BulkRequest.java:67)
at com.gci.geospatial_analysis.db.es.EsIndexClient.insert_layer_metadata_bulk(EsIndexClient.java:19)
at com.gci.geospatial_analysis.ElasticsearchTest.insert_documents_test1(ElasticsearchTest.java:17)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.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)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Run Code Online (Sandbox Code Playgroud)

下面是我的pom,我认为classpath中没有其他任何Lucene版本。

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.7</version>
</dependency>

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-core</artifactId>
  <version>2.9.3</version>
</dependency>

<dependency> …
Run Code Online (Sandbox Code Playgroud)

maven elasticsearch elasticsearch-plugin elasticsearch-java-api elasticsearch-6

4
推荐指数
2
解决办法
2779
查看次数

如何使用 RestHighLevelClient 从弹性搜索中的索引中删除所有文档

我试过下面的代码它工作正常,但它使用TransportClient删除所有文档。

DeleteByQueryRequestBuilder deleteByQueryRequestBuilder = DeleteByQueryAction.INSTANCE.newRequestBuilder(transportClient)
                 .filter(QueryBuilders.matchAllQuery())
                 .source(indexName);
         BulkByScrollResponse response = deleteByQueryRequestBuilder
                .filter(QueryBuilders.matchAllQuery()).get()
Run Code Online (Sandbox Code Playgroud)

我正在使用elasticsearch 6.1.4。使用RestHighLevelClient从索引中删除所有文档的方法是什么。

elasticsearch elasticsearch-java-api elasticsearch-6

4
推荐指数
1
解决办法
2491
查看次数

Elasticsearch Java API不返回命中字段

我对弹性搜索的java api有问题.

当我像这样搜索时:

MatchQueryBuilder query = QueryBuilders.matchQuery("_type", "booking");

SearchResponse searchResponse = client.prepareSearch().setQuery(query).execute().actionGet();

for (SearchHit hit : searchResponse.getHits()){
    Map<String, SearchHitField> fields = hit.getFields();
    System.out.println(fields.size());
}
Run Code Online (Sandbox Code Playgroud)

我的回答从来没有字段,有人可以帮助我吗? 在此输入图像描述

我在用:

elasticsearch java api 1.4.0 elasticsearch 1.4.0

我的数据看起来像

{
  "_index": "bookings",
  "_type": "booking",
  "_id": "50245171",
  "_score": 1,
  "_source": {
    "field1": "value1",
    "field2": "value2",
    "field3": "value3",
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

java elasticsearch elasticsearch-java-api

3
推荐指数
1
解决办法
5436
查看次数

ClassNotFoundException:Spring boot 中的 com.fasterxml.jackson.core.util.JacksonFeature,从 Elasticsearch HLRC 升级到 Java API 客户端

我想用 Elasticsearch 的新 Java API 客户端替换已弃用的高级 Rest 客户端。问题是,我不确定我的依赖项是否配置正确!我遇到了这个错误:

java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/util/JacksonFeature
Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.core.util.JacksonFeature
Run Code Online (Sandbox Code Playgroud)

Elasticsearch 刚刚升级到 7.17.3,Spring Boot 现在是 2.2.8,稍后会升级,但我不确定这是否是问题所在?这是我在 pom 中的依赖项:

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springdoc</groupId>
            <artifactId>springdoc-openapi-webmvc-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springdoc</groupId>
            <artifactId>springdoc-openapi-data-rest</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springdoc</groupId>
            <artifactId>springdoc-openapi-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springdoc</groupId>
            <artifactId>springdoc-openapi-ui</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>co.elastic.clients</groupId>
            <artifactId>elasticsearch-java</artifactId>
            <version>7.17.3</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.13.2</version>
        </dependency>
        <dependency>
            <groupId>jakarta.json</groupId>
            <artifactId>jakarta.json-api</artifactId>
            <version>2.1.0</version>
        </dependency>
    </dependencies>
Run Code Online (Sandbox Code Playgroud)

我按照Elasticsearch的文档进行操作,因此我也尝试使用 2.12.3 版本的 jackson-databind,但错误仍然存​​在。知道应该改变什么吗?谢谢!

编辑:以防万一它有帮助,这也是我的客户,这是需要依赖项的地方(我假设)

@Configuration
public class ElasticsearchClient{

   RestClient restClient = RestClient.builder(new HttpHost("localhost", 9200)).build();
   ElasticsearchTransport transport = new …
Run Code Online (Sandbox Code Playgroud)

maven elasticsearch spring-boot elasticsearch-java-api

3
推荐指数
1
解决办法
9418
查看次数