Elasticsearch - 在 java 中输入查询

Elasticsearch - type a query in java

以下查询获取索引“geoshapes”中位置为 {32.0, 34.0} 的所有文档,我如何在 java 中执行相同的操作?

GET /geoshapes/_search
{
  "query": {
    "bool": {
      "filter": {
        "geo_shape": {
          "coordinates": {
            "relation": "contains",
            "shape": {
              "coordinates": [
                32.0,
                34.0
              ],
              "type": "point"
            }
          }
        }
      },
      "must": {
        "match_all": {}
      }
    }
  }
}

您需要向您的项目导入一个库,该库知道如何与 ElasticSearch 实例通信并以编程方式执行这些查询(即通过您的 Java 代码)。换句话说,您需要 Java 客户端。

看看:https://www.elastic.co/guide/en/elasticsearch/client/java-rest/7.13/index.html

将库导入项目后,您可以:

import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.common.geo.ShapeRelation;
import org.elasticsearch.common.geo.builders.CoordinatesBuilder;
import org.elasticsearch.common.geo.builders.MultiPointBuilder;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.GeoShapeQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;

import static org.elasticsearch.index.query.QueryBuilders.geoShapeQuery;
import static org.elasticsearch.index.query.QueryBuilders.matchAllQuery;

BoolQueryBuilder query1 = QueryBuilders.boolQuery();

GeoShapeQueryBuilder qb = geoShapeQuery(
        "location",
        new MultiPointBuilder(
                new CoordinatesBuilder()
                        .coordinate(32.0, 34.0)
                        .build()));

qb.relation(ShapeRelation.CONTAINS);

query1.filter(qb).must(matchAllQuery());

SearchRequest searchRequest = new SearchRequest("geoshapes");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(query1);
searchRequest.source(searchSourceBuilder);

Elastic 在客户端上有 documentation 对您有用。