spring-boot - 如何在 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”,那么它会给我结果。但我希望它只匹配这个词而不是那个词的大小写。请有人帮我解决这个问题。我搜索了很多,但找不到任何解决方案。
解决方案
尝试在索引映射中使用小写标记过滤器。
https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-lowercase-tokenfilter.html
这样的令牌过滤器在索引和搜索中都应用,因此“Ram”将被索引为“ram”,然后如果您搜索“rAm”,它将更改为“ram”,因此它会命中您的文档。
推荐阅读
- php - 如何根据关系对标题进行排序
- python - 使用 Python 和 Selenium 在 XPath 中跟随兄弟姐妹
- spring - 在 Kotlin 序列的嵌套对象中使用 yield
- ios - 无法将“UITableViewCell”(0x11e159aa0)类型的值转换为“test.CourseItemTableViewCell”
- sql - 列“”的 Sequelize 迁移默认值无法自动转换为“枚举”类型
- excel - 将txt文件转换为word文档中的tab
- python - 测量图像中线段的长度(以像素为单位)
- c# - ODATA:未绑定函数返回具有集合的复杂类型
- swift - 如何在 Swift 中解决我的“核心数据非法建立关系尝试”问题?
- java - 当我的 textInputLayout 为空时如何出错