针对一个值的精确搜索查询和针对一个值的值列表中的搜索查询有什么区别吗?
让我用sql表示法来解释一下。
例如对于 postgtres 来说并不重要 从 id = '1' 的任意位置选择“名称” 或者 从 ('1') 中的任何 id 中选择“名称”;
Postgres 知道如何做得更好。作为一名开发人员,我总是可以使用 IN 子句执行查询。
如果在语义上是相同的查询,那么对于 Elasticsearch 来说有什么关系吗?
您可以在搜索查询中使用
runtime
字段来计算带有 ids 的数组长度
样本文件
PUT /one_item_array/_bulk
{"create":{"_id":1}}
{"id":[1,2,3,4]}
{"create":{"_id":2}}
{"id":[1]}
{"create":{"_id":3}}
{"id":[2]}
使用
runtime
字段搜索查询。第一个 term
查询搜索具有一个 id 的文档。第二个 term
搜索包含 id = 1
的文档
GET /one_item_array/_search?filter_path=hits.hits
{
"runtime_mappings": {
"id_count": {
"type": "long",
"script": {
"source": "emit(params['_source']['id'].size());"
}
}
},
"query": {
"bool": {
"must": [
{
"term": {
"id_count": {
"value": 1
}
}
},
{
"term": {
"id": {
"value": 1
}
}
}
]
}
}
}