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"
            }
        }
    }
}