定义
ElasticSearch查询语句中的query和filter具有不同的用途。
- query:用于评估文档相关性,并对结果进行评分,用于搜索场景;
- filter:用于筛选文档,不会对文档进行评分,通常用于过滤场景。
根据定义就可以知道性能方面filter比query更有效,因为不需要进行评分,并且可以做缓存。但要注意当同时需要评分和筛选文档时,可以使用带有query和filter的组合检索查询。
query示例:
命令:
POST test_index/_search
{
"query": {
"term": {
"city.keyword": {
"value": "诺克萨斯-地点1"
}
}
}
}
结果:
{
.....
"_type" : "_doc",
"_id" : "Z-fhxZAB5oMNbPvTYn1i",
"_score" : 1.0296195,
"_source" : {
"title" : "卡特琳娜",
.....
}
通过结果可以看到_score是有值的。
filter示例:
命令:
POST test_index/_search
{
"query": {
"bool": {
"filter": [
{
"term": {
"city.keyword": "诺克萨斯-地点1"
}
}
]
}
}
}
结果:
{
....
"_id" : "Z-fhxZAB5oMNbPvTYn1i",
"_score" : 0.0,
"_source" : {
"title" : "卡特琳娜",
"brith" : "2024-07-20 10:00:00",
....
}
通过结果可以看到_score是没有值的。
总结
平时开发中有精确搜索时,可以采用filter的方式性能要比query好。