Indexing couchbase索引如何对索引的无效文档和新的有效文档作出反应?

Indexing couchbase索引如何对索引的无效文档和新的有效文档作出反应?,indexing,couchbase,n1ql,Indexing,Couchbase,N1ql,每当您在文档上有一个带有特定条件的索引时,如果该条件不再为真,它是否会自动对文档进行deindex 例如: index a on Abucket(field) where field2='value' 当我创建索引时,带有field2='value'的附件上的所有文档都将被索引 但是,如果文档更改了field2='value2',会发生什么情况呢。然后,将其更改回value1 对于没有字段2字段的文档,这怎么可能起作用呢?我猜这些文档只是没有索引,但是如果以后添加了字段,它们会自动索引吗 索引

每当您在文档上有一个带有特定条件的索引时,如果该条件不再为真,它是否会自动对文档进行deindex

例如:

index a on Abucket(field) where field2='value'
当我创建索引时,带有
field2='value'
的附件上的所有文档都将被索引

但是,如果文档更改了
field2='value2'
,会发生什么情况呢。然后,将其更改回
value1

对于没有
字段2
字段的文档,这怎么可能起作用呢?我猜这些文档只是没有索引,但是如果以后添加了字段,它们会自动索引吗

索引也可以有一个complexewhere查询吗?与
类似,其中ifmissing(field2,ifnull(bla-bla-bla))='value2'

我猜这些只是没有索引,但如果以后 字段被添加,它们是否自动索引

是的,我们应该正确处理字段更改的情况,即使这些字段在indexe的where子句中被引用

我们还支持索引中WHERE子句的复杂表达式


但如果这就是你要去的地方,让我提醒你一些谨慎。索引中WHERE子句的主要用例是将索引限制为某些类型的文档。索引的典型WHERE子句类似于
WHERE type='airport'
。如果您发现自己正在对它们进行更复杂的操作,我建议您在继续操作之前要小心。

原因是,从技术上讲,我想对某些类型的文档使用新字段进行限制,而旧文档中可能没有定义新字段,因此,如果它不存在,我将获取其他字段的值,以查看它是否对应于索引。索引条件必须存在于查询中(表达式必须完全匹配,索引值可以是超集)。如果索引条件有或没有,则不能选择索引。所以索引条件必须简单明了。此外,如果文档中缺少将不编制索引的前导索引键,也会出现这种情况。如果需要,可以使用IFMISSING()来克服这一问题。