【发布时间】:2019-04-18 08:53:38
【问题描述】:
我查看了所有我能找到的关于执行完全匹配、不区分大小写的查询的文章和帖子,但在实施时,它们并没有执行我想要的。
在将此问题标记为重复之前,请阅读整篇帖子。
给定一个用户名,我想查询我的 Elasticsearch 数据库,只返回一个与用户名完全匹配但不区分大小写的文档。
我尝试为我的username 属性指定lowercase 分析器并使用match 查询来实现此行为。虽然这解决了不区分大小写的匹配问题,但在精确匹配时却失败了。
我研究过使用lowercase 规范化器,但这会使我所有的用户名在索引之前都小写,所以当我聚合用户名时,它们会以小写形式返回,这不是我想要的。我需要保留用户名中每个字母的原始大小写。
我想要的是以下行为:
插入用户
POST {elastic}/users/_doc
{
"email": "random@email.com",
"username": "UsErNaMe",
"password": "1234567"
}
该文档将按原样存储在名为users 的索引中。
通过用户名获取用户
GET {frontend}/user/UsErNaMe
应该返回
{
"email": "random@email.com",
"username": "UsErNaMe",
"password": "1234567"
}
和
GET {frontend}/user/username
应该返回
{
"email": "random@email.com",
"username": "UsErNaMe",
"password": "1234567"
}
和
GET {frontend}/user/USERNAME
应该返回
{
"email": "random@email.com",
"username": "UsErNaMe",
"password": "1234567"
}
和
GET {frontend}/user/UsErNaMe $RaNdoM LeTteRs
应该不返回任何东西。
谢谢。
【问题讨论】:
标签: elasticsearch case-insensitive exact-match