首页 > 解决方案 > 如何在 Elasticsearch 中搜索不匹配大小写的精确文本

问题描述

我想在Elasticsearch中搜索用户名。为此,我想匹配确切的用户名,不管它是大写还是小写,我只想找到那个用户名。我为此使用以下查询:

QueryBuilder queryBuilder = QueryBuilders.termQuery("user_name.keyword", userName);
NativeSearchQuery build = new NativeSearchQueryBuilder().withQuery(queryBuilder).build();
List<Company> companies = elasticsearchTemplate.queryForList(build, User.class);

但它也将确切的单词与大小写匹配。例如:如果用户名是“Ram”并且我搜索“ram”,那么它不会返回该名称。如果我搜索“Ram”,那么它会给我结果。但我希望它只匹配这个词而不是那个词的大小写。请有人帮我解决这个问题。我搜索了很多,但找不到任何解决方案。

标签: spring-bootelasticsearchelasticsearch-query

解决方案


尝试在索引映射中使用小写标记过滤器。

https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-lowercase-tokenfilter.html

这样的令牌过滤器在索引和搜索中都应用,因此“Ram”将被索引为“ram”,然后如果您搜索“rAm”,它将更改为“ram”,因此它会命中您的文档。


推荐阅读