asticsearch с пробелом NativeSearchQueryBuilder и прописными буквами
Я использую следующий код для фильтрации по эластичному поиску Java API, он работает нормально и возвращает результат, если я использую строковый запрос, но если я использую текст с пробелами или заглавными буквами, он не возвращает никаких данных
если использовать
String query={"bool":{"should":[{"term":{"name":"test"}}]}}
вернуть данные
и если я использую
String query={"bool":{"should":[{"term":{"name":"test airportone"}}]}}
или же
String query={"bool":{"should":[{"term":{"name":"TEST"}}]}}
не возвращать данные
String query={"bool":{"should":[{"term":{"name":"test airport one"}}]}}
BoolQueryBuilder bool = new BoolQueryBuilder();
bool.must(new WrapperQueryBuilder(query));
SearchQuery searchQuery = new
NativeSearchQueryBuilder()
.withQuery(bool)
.build();
Page<Asset> asset =
elasticsearchTemplate.queryForPage(searchQuery,Asset.class);
return asset.getContent();
1 ответ
У вас есть два варианта в зависимости от вашего варианта использования.
Первый вариант: вы можете использовать match
вместо term
искать строку, если вы хотите воспользоваться преимуществами полнотекстового поиска ElasticSearch.
{
"bool": {
"should": [{
"match": {
"name": "test airportone"
}
}]
}
}
Второй вариант: вы также можете указать, что name
поле not analyzed
при отображении индекса таким образом, чтобы ElasticSearch всегда сохранял его как есть и всегда получал точное совпадение.
"mappings": {
"user": {
"properties": {
"name": {
"type": "string"
"index": "not_analyzed"
}
}
}
}