【问题标题】:Couchbase Search key-valuesCouchbase 搜索键值
【发布时间】:2015-11-25 11:48:10
【问题描述】:

如何使用 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 视图实现这一点?

【问题讨论】:

    标签: couchbase


    【解决方案1】:

    如果可以,请使用 N1QL

    您是否查看过新发布的 Couchbase Server 4.0,尤其是N1QL

    这是一种非常强大的查询语言(SQL 的超集),它允许您使用任何组合来查询您的文档,包括例如。 state AND city 等...

    您可以在最有可能查询的字段上设置二级索引以获得更好的性能,并获得很大的灵活性!

    如果你真的想坚持观看

    要回答您关于视图的问题,如果您希望能够通过仅从 4 个条件中选择一个来进行查询,那么您需要做的是构建 4 个视图(每个条件一个)。每个视图都会将文档映射到相应的标准。例如,国家/地区:

    function (doc, meta) {
      if (doc.country) {
        emit(doc.country, null);
      }
    }
    

    if 检查该字段是否确实存在。如果您的存储桶中有多种文档类型,也许您还想过滤适当的文档类型(例如,通过检查您的示例中 _id 属性的前缀是否为 location::)。

    然后,搜索将只是从 4 个视图中查询正确视图的问题,提供 key 进行搜索,例如。 france。注意:也许您想发出 toUpperCase() 版本的数据,以便搜索不区分大小写(查询时也必须将查找键大写)。

    文档

    有关使用 Couchbase 进行查询的一般信息(从开发人员的角度来看),请查看 N1QLViews 上的开发人员指南。

    另请参阅documentation of your SDK,了解如何以您喜欢的语言查询views 和/或N1QL

    【讨论】:

    • 感谢您的回复。我无法使用 N1QL,因为我使用的是不支持 N1QL 的 3.0.1 社区版。第二个使用视图我可以使用 ** function (doc, meta) { emit(doc.city, null); emit(doc.state, null); emit(doc.country, null); } ** 1. 我想像运算符 2 一样匹配 SQL 中的子字符串。它也区分大小写。我不想要这个。
    • 公平一点,您可以在单个视图中执行 4 次发射...对于子字符串,视图仅限于前缀搜索(相当于 LIKE 'prefix%'),通过一个技巧。要忽略大小写,请在 map 函数中发出大写版本的键,在查询时对键条件应用相同的过程。
    • 顺便说一句,如果您还没有生产,我会立即跳转到 CB 4.0.0 社区版并使用N1QL。即使我在生产中,我也会认真考虑(有更多计划);)
    • 能否请您更详细的子字符串搜索视图?我无法得到“前缀%”?示例代码将不胜感激。提前感谢您的帮助。
    • 啊,是的,这是对 SQL 的一种认可……使用视图执行此操作的方法是通过传递 startkey 和 endkey 参数,并带有一点 unicode 技巧:例如 startkey"theEmail"那么endkey 将是"theEmail\uEFFF"。这里\uEFFF 是一个按字母数字顺序足够高的unicode char,没有其他以“myEmail”开头的单词将在“myEmail\uEFFF”之后排序,因此您可以将其用作范围的结束端。例如以 urlencoded 形式:http://localhost:8092/default/_design/test/_view/map?startkey=%22barb%22&endkey=%22barb%5Cuefff%22
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多