Elasticsearch соответствует частичному тексту в Java - PullRequest
0 голосов
/ 22 января 2019

У меня есть поле вasticsearch "name", которое содержит, например: "некоторый текст" Я хотел бы сделать запрос, который соответствует любой части этого текста, например, "some", "so" или "xt"

Я пытался сделать это queryString:

public Page<View> search(String name, Pageable pageable) {
    QueryBuilder queryBuilder = buildQueryFrom(name);
    HighlightBuilder highlightBuilder = buildHighlig();

    SearchRequestBuilder searchRequest = client.prepareSearch()
            .setQuery(queryBuilder)
            .highlighter(highlightBuilder)
            .setFetchSource(null, new String[]{CV_OCR});
    addPageable(searchRequest, pageable);

    SearchResponse response = searchRequest.execute().actionGet();
    return mapper.mapResponse(response, pageable).map(this::View);
}

private QueryBuilder buildQueryFrom(String text) {
    BoolQueryBuilder queryBuilder = boolQuery();

    queryBuilder.must(queryStringQuery("*" + text + "*").field("name"));
    return queryBuilder;
}

но если я попытаюсь найти, например, "%" или другой специальный символ, результаты будут отличаться от моих ожиданий. Я пытался также использовать регулярное выражение:

private QueryBuilder buildQueryFrom(String text) {
    BoolQueryBuilder queryBuilder = boolQuery();

    queryBuilder.must(regexpQuery("name", quoteStringAndSetCaseInsensitive(text).pattern()));
    return queryBuilder;
}

private Pattern quoteStringAndSetCaseInsensitive(String value) {
    return Pattern.compile(Pattern.quote(value), Pattern.CASE_INSENSITIVE);
}

но это не сработало. Есть ли другая возможность для поиска, подобного этому?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...