es字段查询加keyword和不加keyword的区别
在Elasticsearch中,如果你执行一个字符串字段的查询,但是没有指定是否使用keyword
子字段,Elasticsearch会默认使用一个叫做text
的字段进行查询。如果你的字段既有text
子字段也有keyword
子字段,通常建议你在进行需要精确匹配(例如等值比较)的查询时使用keyword
子字段。
使用keyword
子字段进行查询时,Elasticsearch会对你的查询进行精确匹配,这意味着大小写是敏感的,并且在搜索时不会进行分词。而如果不指定keyword
,Elasticsearch会使用text
子字段进行查询,这通常会导致分词的结果被用来进行搜索,这可能不是你想要的结果。
例如,如果你有一个名为title
的字段,它既包括text
子字段也包括keyword
子字段,当你想要进行精确匹配查询时,你应该这样写查询:
{
"query": {
"term": {
"title.keyword": {
"value": "Elasticsearch: The Definitive Guide"
}
}
}
}
如果不使用.keyword
,你可能会得到不期望的结果,因为text
字段可能会将你的搜索词进行分词。
评论已关闭