Couchbase搜索关键字值
如何使用CB视图在Couchbase中实现搜索。我不想使用弹性搜索进行搜索。根据价值搜索文档的最佳方法是什么。例如,下面是我的文档。我想实现基于姓名、城市、州和国家的搜索Couchbase搜索关键字值,couchbase,Couchbase,如何使用CB视图在Couchbase中实现搜索。我不想使用弹性搜索进行搜索。根据价值搜索文档的最佳方法是什么。例如,下面是我的文档。我想实现基于姓名、城市、州和国家的搜索 { "_id": "location::370794", "name": "Kenai Riverside Fishing", "description": "Welcome to the Kenai Riverside Fishing program at Kenai Riverside Lodge, your
{
"_id": "location::370794",
"name": "Kenai Riverside Fishing",
"description": "Welcome to the Kenai Riverside Fishing program at Kenai Riverside Lodge, your destination for incredible Alaska fishing experiences. Kenai Riverside Fishing is part of Alaska Wildland Adventures, a long-time operator of guided fishing trips since 1977. Our trips explore the world-famous Kenai River for freshwater species, like king and sockeye salmon, rainbow trout and Dolly Varden. We also fish Resurrection Bay for halibut and silver salmon. Whether you are a seasoned angler or a first time fisherman, we’ll put you on the fish!",
"city": "Cooper Landing",
"state": "Alaska",
"country": "USA",
}
如何使用couchbase视图实现这一点?如果可以,请使用N1QL 您是否研究过最新发布的Couchbase Server 4.0,尤其是N1QL 这是一种非常强大的查询语言(SQL超集),允许您使用任何组合来查询文档,包括
state
和city
等
您可以在最有可能查询的字段上设置二级索引,以获得更好的性能,并且您可以获得很大的灵活性
如果你真的想坚持观点
要回答关于视图的问题,如果您希望能够通过从4个标准中选择一个来进行查询,那么您需要做的是构建4个视图(每个标准一个)。每个视图都会将文档映射到相应的条件。例如,对于国家:
function (doc, meta) {
if (doc.country) {
emit(doc.country, null);
}
}
if
检查字段是否实际存在。如果bucket中有多个文档类型,可能还需要筛选适当的文档类型(例如,在示例中,通过检查\u id
属性的前缀是否为位置::
)
然后,搜索只需查询4个视图中的正确视图,提供要搜索的键,例如france
。注意:可能您希望发出一个toUpperCase()
版本的数据,以便搜索不区分大小写(查询时也必须将查找键大写)
文档
有关使用Couchbase进行查询的一般信息(从开发人员的角度),请参阅和上的开发人员指南
另请参阅,了解如何以您喜爱的语言查询视图
和/或N1QL
。谢谢您的回复。我不能使用N1QL,因为我使用的是不支持N1QL的3.0.1社区版。其次,使用视图,我可以使用**函数(doc,meta){emit(doc.city,null);emit(doc.state,null);emit(doc.country,null);}
**1。我想匹配SQL-like运算符2中的子字符串。它也区分大小写。我不想这样。公平的说,你可以在一个视图中进行4次发射。。。对于子字符串,通过一种技巧,视图仅限于前缀搜索(相当于类似于'prefix%'
)。若要忽略大小写,请在映射函数中发出键的大写版本,在查询时对键条件应用相同的过程。顺便说一句,如果您尚未投入生产,我将立即跳转到CB 4.0.0 Community Edition并使用N1QL
。即使我在生产,我会认真考虑它(更多的计划);能否请您详细介绍一下子字符串搜索视图?我无法获取“前缀%”?示例代码将不胜感激。提前感谢您的帮助。啊,是的,这是对SQL的一种认可。。。使用视图实现这一点的方法是通过传递startkey和endkey参数,并使用一些unicode技巧:例如startkey
是“theEmail”
,然后endkey
将是“theEmail\uEFFF”
。这里的\uEFFF
是一个unicode字符,其字母数字顺序足够高,因此没有其他以“myEmail”开头的单词会在“myEmail\uEFFF”之后排序,因此您可以将其用作范围的结尾。例如,URL编码形式:http://localhost:8092/default/_design/test/_view/map?startkey=%22barb%22&endkey=%22barb%5Cuefff%22