#java #spring #rest #spring-boot #elasticsearch
#java #весна #rest #spring-boot #elasticsearch
Вопрос:
Я использую RestHighLevelClient для использования эластичных API.
Версия RestHighLevelClient: 6.4.3 Эластичная версия: 6.7
Я получаю правильные результаты при передаче одной строки, но никаких результатов при передаче строк, разделенных пробелом, с использованием RestHighLevelClient. Однако то же самое отлично работает с Postman.
Мой JAVA-код:
search(broker, "merchant_stores", QueryBuilders.fuzzyQuery("search_string", searchString).fuzziness(Fuzziness.TWO), DeviceMerchantStore.class)
protected Flux<T> search(final String index, final String type, final QueryBuilder queryBuilder, final Class<T> clazz) throws IOException {
SearchRequest searchRequest = new SearchRequest(index);
searchRequest.types(type);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(queryBuilder);
searchRequest.source(searchSourceBuilder);
final SearchResponse searchResponse = elasticClient.search(searchRequest, RequestOptions.DEFAULT);
final List<T> l = new ArrayList<>();
for(SearchHit searchHit: searchResponse.getHits().getHits()) {
l.add(new ObjectMapper().readValue(searchHit.getSourceAsString(), clazz));
} return Flux.fromIterable(l);
}
Запрос, построенный на JAVA:
{
"fuzzy" : {
"search_string" : {
"value" : "croma Maharashtra",
"fuzziness" : "2",
"prefix_length" : 0,
"max_expansions" : 50,
"transpositions" : false,
"boost" : 1.0
}
}
}
Запрос запущен в Postman
{
"query": {
"match": {
"search_string": {
"query": "croma Maharashtra",
"fuzziness": 2,
"max_expansions" : 50,
"prefix_length" : 0,
"boost":1.0
}
}
}
}
Дайте мне знать, чего мне здесь не хватает.
Ответ №1:
У вас нет такого же результата из-за «транспозиций»: false. Действительно, при совпадении (допустим, у вас есть std analyzer) похоже, что транспозиции истинны (и вы не можете установить для него значение false). Таким образом, в результате запроса соответствия ab = ba будет возвращено, как в вашем нечетком запросе они не будут.
Ответ №2:
Запросы не совпадают:
Изменить:
QueryBuilders.fuzzyQuery("search_string", searchString).fuzziness(Fuzziness.TWO)
Для:
QueryBuilders.fuzzyQuery("search_string", searchString).fuzziness(Fuzziness.TWO).transpositions(false)