我们有一个这种结构的表:
{_id:15_0, createdAt: 1/1/1, task_id:[16_0, 17_0, 18_0], table:”details”, a:b, c: d, more}
我们使用
创建了索引 {
"index": {},
"name": "paginationQueryIndex",
"type": "text"
}
自动创建
{
"ddoc": "_design/28e8db44a5a0862xxx",
"name": "paginationQueryIndex",
"type": "text",
"def": {
"default_analyzer": "keyword",
"default_field": {
},
"selector": {
},
"fields": [
],
"index_array_lengths": true
}
}
我们正在使用以下查询
{
"selector": {
"createdAt": { "$gt": 0 },
"task_id": { "$in": [ "18_0" ] },
"table": "details"
},
"sort": [ { "createdAt": "desc" } ],
"limit”: 20
}
第一次需要700-800毫秒,之后会减少到500-600毫秒
为什么第一次需要更长的时间?
有什么方法可以加快查询速度?
如果type是“text”,是否可以将索引添加到特定字段? (而不是索引这些记录中的所有字段)
答案 0 :(得分:1)
您可以尝试更明确地创建索引,定义您希望索引的每个字段的类型,例如:
{
"index": {
"fields": [
{
"name": "createdAt",
"type": "string"
},
{
"name": "task_id",
"type": "string"
},
{
"name": "table",
"type": "string"
}
]
},
"name": "myindex",
"type": "text"
}
然后您的查询变为:
{
"selector": {
"createdAt": { "$gt": "1970/01/01" },
"task_id": { "$in": [ "18_0" ] },
"table": "details"
},
"sort": [ { "createdAt": "desc" } ],
"limit": 20
}
请注意,我使用了数据类型为字符串的字符串。
如果您对性能感兴趣,请尝试一次从查询中删除子句,以查看是否导致性能问题。您还可以查看查询的explanation,看它是否正确使用您的索引。
有关创建显式文本查询索引的文档是here