使用 term 指定过滤器时,该字段是否始终为 not_analyzed ,还是可以使用 keyword 分析器?例如:
"must_not": [
{
"term": {
"personid": "ABADF00D-BEEF-4218-B59B-A164017A3BA0"
}
},
如果我想查找该personid不区分大小写,我可能会使用带有小写过滤器的关键字tokenizer . 但这似乎导致它在用作 term 时不起作用 . 在这种情况下我应该坚持 not_analyzed 吗?
1 回答
将字段声明为
not_analyzed
等同于使用keyword
tokenizer而不使用任何其他过滤器(即没有lowercase
) .如果您希望能够以不区分大小写的方式搜索该字段,但仍允许
term
查询,则有两个选项 .选项A:像现在一样使用
keyword
tokenizerlowercase
令牌过滤器,但请确保term
查询中的值小写,即选项B:像现在一样使用
keyword
tokenizerlowercase
标记过滤器(在下面命名为your_analyzer
),但也添加一个声明为not_analyzed
的子字段raw
. 所以你的映射基本上是这样的:然后你在
personid.raw
子字段上运行term
查询,如果你想不区分大小写搜索,那么你就可以在personid
字段上运行查询