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

如何使用CB视图在Couchbase中实现搜索。我不想使用弹性搜索进行搜索。根据价值搜索文档的最佳方法是什么。例如,下面是我的文档。我想实现基于姓名、城市、州和国家的搜索

{
  "_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