Indexing 为什么此复合辅助couchbase索引仅与创建查询中的第一个字段匹配

Indexing 为什么此复合辅助couchbase索引仅与创建查询中的第一个字段匹配,indexing,couchbase,n1ql,Indexing,Couchbase,N1ql,我使用以下查询为我的订单桶创建了一个复合索引: CREATE INDEX idx_customer ON `order` ( buyer.contact.firstName, buyer.contact.lastName, ALL DISTINCT ARRAY aoc.`value` FOR aoc IN buyer.contact.communicationChannel WHEN aoc.`communicationChannelCode`= "EMAIL" END) WHERE _cl

我使用以下查询为我的订单桶创建了一个复合索引:

CREATE INDEX idx_customer ON `order` (
buyer.contact.firstName, 
buyer.contact.lastName, 
ALL DISTINCT ARRAY aoc.`value` FOR aoc IN buyer.contact.communicationChannel
WHEN aoc.`communicationChannelCode`= "EMAIL" END)
WHERE _class = "com.lbk.entities.OrderEntity"
当我搜索buyer.contact.firstName时,查询与索引匹配,但搜索buyer.contact.lastName失败。 基本上,它与查询中的第一个字段匹配

以下是解释失败字段的结果(buyer.contact.lastName):


Enterprise Edition 5.5.1 build 3511要使用索引,查询谓词必须具有前导索引键作为谓词。 Couchbase bucket可以有任何类型的文档,并且没有模式。当文档中缺少前导索引键时,索引器将不编制索引。若在前导索引键上并没有谓词,那个么查询也必须包含缺少的值,所以该索引将不符合该查询的条件,也不会被使用

在您的例子中,如果可以的话,添加以下一项到查询谓词中

1) AND buyer.contact.firstName IS NOT MISSING
2) AND buyer.contact.firstName IS NOT NULL
3) AND buyer.contact.firstName IS VALUED

中签出“在Couchbase N1QL中为查询设计索引”是另一种方式。当您匹配firstName时,查询使用索引,而不是lastName。在本例中,它只匹配第一个字段,即buyer.contact.firstName。感谢您的回复,但我在com.lbk.entities.OrderEntity文档中没有缺少firstName lastName和电子邮件的数据,如果我切换订单,然后火焰场以指数的形式运动,指数不知道。如果不需要,只需将加法谓词2添加到查询中即可
1) AND buyer.contact.firstName IS NOT MISSING
2) AND buyer.contact.firstName IS NOT NULL
3) AND buyer.contact.firstName IS VALUED