gpt4 book ai didi

couchdb - 如何让 Couchdb/Cloudant 设计文档准备好搜索所有字段?

转载 作者:行者123 更新时间:2023-12-01 03:41:32 24 4
gpt4 key购买 nike

我有一个非常简单的数据库,其中包含一些存储在 Cloudant 中的数据模式。

{
"_id": "units_modal_the_oaks_preliminary",
"_rev": "1-b541013bc008680b706ea01969dedb7a",
"type": "units_modal",
"label": "Preliminary Modal",
"notes": "Notes here...",
"project": "the_oaks",
"data": [...]
}

我将 Cloudant 与 PouchDB 连接起来。我的目标只是让这个数据库准备好由除数据以外的所有字段进行查询。

我使用 PouchDB-Find 来查询数据。我在创 build 计文档和 View 的文档上花了一整天的时间,但我不知道如何正确地做到这一点。所有文档都建议使用 map 函数和 reduce 函数。我尝试了各种方法来手动设计 map 功能,但是当我运行查询时
remoteDb.find({
selector:{type:"units_modal"}
})

我收到“no_usable_index”错误。我只能使用 PouchDB-find 的附带方法来创建索引,然后我可以获得我想要的结果:
remoteDb.createIndex({
index: {
fields: ['type', 'project','label','notes']
}
})

我看了设计文档。这是我所拥有的(我重命名了 id 和 View ):
{
"_id": "_design/project",
"_rev": "8-c7e2b7c0e1dbaff8e5641a4f06075e14",
"language": "query",
"views": {
"units_modal": {
"map": {
"fields": {
"type": "asc",
"project": "asc",
"label": "asc",
"notes": "asc"
}
},
"reduce": "_count",
"options": {
"def": {
"fields": [
"type",
"project",
"label",
"notes"
]
},
"w": 2
}
}
}
}

所有这些都非常令人困惑。看来除了 map 功能之外,我找不到任何可以解释 map 的东西。这里的 map 功能在哪里?关于 map.fields、views.options.def 和 views.options.w 的文档和解释在哪里?

任何人都可以提出一种简单的方法来设计可以轻松查询有关某种类型文档的所有字段的 View 吗?

任何人都可以建议一个我可以得到更多关于 map.fields、view.options 和所有这些关于 CouchDB 的小东西的解释的地方吗?

是否有一个简单的“if(type=='some type') indexAll();”解决方案?

非常感谢!

最佳答案

首先,很抱歉您发现这令人困惑。 Cloudant Query 是 Cloudant/CouchDB 中一个相对较新的特性,实际上是对现有的、较低级别的索引机制(map/reduce 和 search)的封装。用户创建的 map/reduce 或 Cloudant Search 索引不能用于为 Cloudant Query 调用提供服务 - 它维护自己的索引。

Cloudant Query 要求存在合适的索引来为对 _find 的请求提供服务,因此您会收到错误消息。 Cloudant Query 支持(目前)两种不同类型的索引 - JSON(包装 map/reduce)和文本(包装 Cloudant Search/Lucene)。文本索引更灵活,JSON 索引更高效。

文本索引的默认行为是索引每个字段,我们建议从这里开始,除非您知道您的数据库将变得非常大(100s GB)或复杂。您可以 create one通过 PouchDB 使用:

remoteDB.createIndex({
name: "myindex",
index": {},
type: "text"
}).then(function (result) {
// yo, a result
}).catch(function (err) {
// ouch, an error
});

或通过 curl :
curl -u <username> 'https://<username>.cloudant.com/<db>/_index' -X POST -H'Content-Type:application/json' -d '{"index":{},"type":"text"}'

如果要更改索引以便省略“数据”,可以指定要索引的字段:
remoteDB.createIndex({
name: "myindex",
index": {
"fields": ["_id","_rev","type","label","notes","project"]
},
type: "text"
}).then(function (result) {
// yo, a result
}).catch(function (err) {
// ouch, an error
});

创建该索引后,您的 PouchDB-Find 查询应该可以工作了。

如果您想详细了解 Cloudant 中不同类型的查询机制(Cloudant Query、Cloudant Search 和 map/reduce),请查看 learning centre是一个很好的起点。

关于couchdb - 如何让 Couchdb/Cloudant 设计文档准备好搜索所有字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30429589/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com