我想在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”,那么它给了我结果。但我希望它只与单词匹配,而不与单词匹配。请有人帮助我解决这个问题。我搜索了很多,但找不到任何解决方案。
尝试在索引映射中使用小写标记过滤器。
https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-lowercase-tokenfilter.html
这样的令牌过滤器在索引和搜索中都会应用,因此“ Ram”将被索引为“ ram”,然后如果您搜索“ rAm”,它将被更改为“ ram”,因此它将命中您的文档。