如何在Elasticsearch中搜索不匹配大小写的精确文本

问题描述 投票:0回答:1

我想在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-boot elasticsearch spring-data-elasticsearch
1个回答
0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.