Проблема выделения Elasticsearch в режиме гибернации

#spring-boot #elasticsearch #hibernate-search

Вопрос:

У меня возникла проблема с созданием службы подсветки для моего проекта с использованием платформы hibernate elasticsearch. Мне нужно добавить возможность выделять все текстовые фразы в этих полях. Когда я пытаюсь создать службу подсветки, я получаю ошибку, подобную той, которую я опубликовал здесь, т. Е. Исключение нулевого указателя. У меня есть этот код:

 private JsonArray getHighlightingText(SearchSession searchSession, ConsultantSearchQuery searchQuery) {
ElasticsearchSearchResult<ConsultantSearchE> result = searchSession.search(ConsultantSearchE.class)
        .extension(ElasticsearchExtension.get())
        .where(f -> f.match()
                .fields("documents.text",
                        "firstName",
                        "lastName",
                        "email",
                        "phone.phoneNumber",
                        "company.name"
                )
                .matching(searchQuery.getQuery()))
        .requestTransformer(context -> {
            JsonObject body = context.body();
            body.add("query", jsonObject(query -> {
                query.addProperty("match_phrase", searchQuery.getQuery());
            }));
            body.add("highlight", jsonObject(highlight -> {
                highlight.addProperty("type", "unified");
                highlight.addProperty("number_of_fragments", 3);
                highlight.add("fields", jsonObject(fields -> {
                    fields.add("content", jsonObject(term -> { }));
                }));
            }));
        })
        .fetch(20);

JsonObject responseBody = result.responseBody();
return responseBody.getAsJsonObject("highlight")
        .getAsJsonArray("fields");}


private List<JsonObject> hitProjection(SearchSession searchSession) {
    return searchSession.search(ConsultantSearchE.class)
            .extension(ElasticsearchExtension.get())
            .select(ElasticsearchSearchProjectionFactory::jsonHit)
            .where(SearchPredicateFactory::matchAll)
            .fetchHits(20);
}


private static JsonObject jsonObject(Consumer<JsonObject> instructions) {
    JsonObject object = new JsonObject();
    instructions.accept(object);
    return object;
}
 

Но это не работает, у меня такая ошибка:

 Response: 400 'Bad Request' from 'http://localhost:9200' with body
{
  "error": {
    "root_cause": [
      {
        "type": "parsing_exception",
        "reason": "[match_phrase] query malformed, no start_object after query name",
        "line": 1,
        "col": 26
      }
    ],
    "type": "parsing_exception",
    "reason": "[match_phrase] query malformed, no start_object after query name",
    "line": 1,
    "col": 26
  },
  "status": 400
}
] with root cause
 

Комментарии:

1. можете ли вы предоставить запрос, который вы используете, в формате JSON ?