Напишите elasti c поисковый фильтр поиска с использованием ES Java API v7.x - PullRequest
0 голосов
/ 16 апреля 2020

Я пытался написать запрос фильтра, используя elasti c search Java Версия API 7.6

Но нет хорошей документации о том, как написать контекстный поиск фильтра.

Кто-нибудь знает, как написать Java API для следующего:

GET /_search
{
  "query": { 
    "bool": { 
      "must": [
        { "match": { "title":   "Search"        }},
        { "match": { "content": "Elasticsearch" }}
      ],
      "filter": [ 
        { "term":  { "status": "published" }},
        { "range": { "publish_date": { "gte": "2015-01-01" }}}
      ]
    }
  }
}

1 Ответ

1 голос
/ 17 апреля 2020

Попробуйте следующее

BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
List<QueryBuilder> mustClauses = boolQueryBuilder.must();
mustClauses.add(QueryBuilders.matchQuery("title", "Search"));
mustClauses.add(QueryBuilders.matchQuery("content", "Elasticsearch"));

List<QueryBuilder> filterClauses = boolQueryBuilder.filter();
filterClauses.add(QueryBuilders.termQuery("status", "published"));
filterClauses.add(QueryBuilders.rangeQuery("publish_date").gte("2015-01-01"));


SearchRequest searchRequest = new SearchRequest();
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(boolQueryBuilder);
searchRequest.source(searchSourceBuilder);

System.out.println(searchRequest.toString());

Результирующий запрос

{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "title": {
              "query": "Search",
              "operator": "OR",
              "prefix_length": 0,
              "max_expansions": 50,
              "fuzzy_transpositions": true,
              "lenient": false,
              "zero_terms_query": "NONE",
              "auto_generate_synonyms_phrase_query": true,
              "boost": 1.0
            }
          }
        },
        {
          "match": {
            "content": {
              "query": "Elasticsearch",
              "operator": "OR",
              "prefix_length": 0,
              "max_expansions": 50,
              "fuzzy_transpositions": true,
              "lenient": false,
              "zero_terms_query": "NONE",
              "auto_generate_synonyms_phrase_query": true,
              "boost": 1.0
            }
          }
        }
      ],
      "filter": [
        {
          "term": {
            "status": {
              "value": "published",
              "boost": 1.0
            }
          }
        },
        {
          "range": {
            "publish_date": {
              "from": "2015-01-01",
              "to": null,
              "include_lower": true,
              "include_upper": true,
              "boost": 1.0
            }
          }
        }
      ],
      "adjust_pure_negative": true,
      "boost": 1.0
    }
  }
}
...