Views 如何在couchdb中实现复杂的搜索过滤器?我应该避免临时的观点吗?
我想在网格中管理我的用户实体。我想对它们进行排序,并为每一列设置一个搜索过滤器 我的动态生成的临时视图工作正常:Views 如何在couchdb中实现复杂的搜索过滤器?我应该避免临时的观点吗?,views,couchdb,temporary,Views,Couchdb,Temporary,我想在网格中管理我的用户实体。我想对它们进行排序,并为每一列设置一个搜索过滤器 我的动态生成的临时视图工作正常: function(doc){ if(doc.type === 'User' && // Dynamic filters: WHERE firstName LIKE '%jim%' AND lastName LIKE '%knopf%' (doc.firstName.match(/.*?jim.*?/i) && doc.l
function(doc){
if(doc.type === 'User' &&
// Dynamic filters: WHERE firstName LIKE '%jim%' AND lastName LIKE '%knopf%'
(doc.firstName.match(/.*?jim.*?/i) &&
doc.lastName.match(/.*?knopf.*?/i)) ) {
// Dynamic sort
emit(doc.lastName, doc);
}
}
但是任何地方都写着你必须避免临时的观点。有更好的办法吗?我应该在运行时按需保存这些搜索吗
谢谢您绝对不应该使用临时视图,因为每次查询临时视图时都必须重新计算它们。(这是一个非常“昂贵”的过程)当您提前知道要搜索的字段时,存储视图是完美的。(它只构建一次索引,之后只进行增量更改)
但是,您将无法获取“包含”搜索。(你可以得到精确的匹配,并从“匹配开始”,但这不是你的例子显示)如果你需要特别的查询,你应该认真考虑。你也可以尝试Cloudant最近发布的CyoRoad搜索-你是什么意思“重新计算每一次”?是否每次都会重新计算简单的SQL语句?也许我只需要一次这个复杂的视图,大多数情况下,SQL命令的速度会因为索引的存在而大大加快。这可以是主键,也可以是索引字段。与关系数据库的索引相比,CouchDB map/reduce索引要复杂一些,这给了它更大的灵活性。SQL语句“firstName(如“%jim%”和lastName(如“%knopf%”)”是否因索引而加快了速度?