使用 term 指定过滤器时,字段是 not_analyzed 还是关键字分析器?例如:
"must_not": [
{
"term": {
"personid": "ABADF00D-BEEF-4218-B59B-A164017A3BA0"
}
},
如果我想查找该personid不区分大小写,我可能会使用带有小写过滤器的关键字tokenizer。但是,当用作术语时,这似乎导致它无效。在这种情况下,我应该坚持 not_analyzed 吗?
答案 0 :(得分:2)
将字段声明为not_analyzed
相当于使用keyword
令牌工具而不使用任何其他过滤器(即没有lowercase
)。
如果您希望能够以不区分大小写的方式搜索该字段,但仍允许term
个查询,则有两种选择。
选项A:像现在一样使用keyword
令牌化程序+ lowercase
令牌过滤器,但请务必将term
查询中的值小写,即
"must_not": [
{
"term": {
"personid": "abadf00d-beef-4218-b59b-a164017a3ba0"
}
},
选项B:现在使用keyword
令牌化程序+ lowercase
令牌过滤器(在下面命名为your_analyzer
),同时添加您声明的子域raw
为not_analyzed
。所以你的映射基本上是这样的:
{
"personid": {
"type": "string",
"analyzer": "your_analyzer",
"fields": {
"raw": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
然后您在term
子字段上运行personid.raw
查询,如果您想要不区分大小写搜索,那么您就可以在{{1}上运行查询字段
personid