nosql – 使用CouchDB进行多标准搜索

如何从CouchDB获取数据,过滤多个字段.

例如,如果我有一个人员数据库,其中包含姓名,州,国家等字段;和网页上的搜索表单,如何仅考虑非空条件,如何从CouchDB获取数据.

在SQL中,我会将条件附加到where子句WHERE Person.Name =“John”AND Person.State in(“NY”,“CA”),但是如何将此查询构造为CouchDB视图

在CouchDB中,您使用map / reduce视图.在SQL中,您必须明确说明将创建哪个字段索引.在CouchDB中,您编写自定义函数创建索引,因此它可以更具体地满足您的需求.如果你想要索引这样一个简单的事情,如搜索名称,州和国家字段,视图只是一个地图功能:

function (doc) {
  if (doc.name && doc.state && doc.country)
    emit([doc.name, doc.state, doc.country], doc);
}

要使用此视图进行搜索,请搜索键[“my_name”,“my_state”,“my_country”].您可以使用它来查询名称,州和国家的子集,只要它们是发射数组的前缀(例如,使用名称但不使用州和国家搜索),因为地图的可搜索结果按字典顺序排序.

原则上,视图是具有查询功能的索引,但不像SQL查询那样灵活.它们被执行一次并存储在磁盘上,并逐步计算新的/修改的数据.请注意,在分布式系统(设计CouchDB)中很难做到效率低的事情:更复杂的连接,没有索引的搜索……虽然在很多情况下,在结构化时不需要对关系模型中的表进行人工划分文档可用,并且不需要某些连接.

有关CouchDB与SQL的简要比较,请参阅this chapter of The Definitive Guide书和其他章节以及官方wiki以获取有关视图的更多信息.

相关文章
相关标签/搜索