首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >全文检索和复合键

全文检索和复合键
EN

Stack Overflow用户
提问于 2015-07-08 15:23:53
回答 2查看 296关注 0票数 1

我在Couchbase中有以下数据:

文档06001

代码语言:javascript
复制
{
  "type": "box",
  "name": "lxpag",
  "number": "06001",
  "materials": [
    {
      "type": "material",
      "number": "070006",
      "name": "hosepipe"
    },
    {
      "type": "material",
      "number": "080006",
      "name": "Philips screw 4mm"
    },
}

文档12345

代码语言:javascript
复制
{
  "type": "material",
  "number": "12345",
  "name": "Another screw"
}

现在,我希望能够按类型、名称或数字进行查询:对于给定的查询类型,将只返回具有相应类型属性的文档。此外,第二个查询字符串指定应该搜索哪种材料。如果材料的id或名称包含(而不是以搜索词开头),则应包括该名称。如果盒子内的材料之一与该术语相匹配,则应包括整个盒子。

我想出的是:

代码语言:javascript
复制
function (doc, meta) {
  if (doc.type === 'box' && Array.isArray(doc.materials))  {
    var queryString = "";
    for (i = 0; i < doc.materials.length; ++i) {
      var material = doc.materials[i];
      if (material.name && material.number) {
        queryString += " " + material.name + " " + material.number;
      }
    }
    emit([doc.type, queryString], doc);
  } else if (doc.type === 'material') {
    var queryString = doc.name + " " + doc.number;
    emit([doc.type, queryString], doc);
  }
}

我发现这个视图可能不适合进行子字符串搜索(为此需要ElasticSearch吗?)然而,当我使用以下查询参数时:

代码语言:javascript
复制
startKey=["box","pag"]&endKey=["box\u02ad","pag\u02ad"]

...not只获取框,但也得到视图返回的所有其他文档。因此,有了这些键,就不会过滤任何内容。另一方面,key的搜索是有效的。

这怎麽可能?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-09 14:10:04

没有使用视图键进行子字符串搜索的好方法。您的选项要么与ElasticSearch集成,要么使用N1QL,它允许您执行通配符字符串匹配:"SELECT * FROM其中类型=‘either’并命名为‘%螺杆%’“

票数 1
EN

Stack Overflow用户

发布于 2015-07-09 08:18:18

我刚刚看到了查询中的缺陷:参数必须用小写写,否则Couchbase就不能识别它们,而忽略它们(如果我在这里得到错误消息,而不是通常的结果列表.)。所以,我不得不用

代码语言:javascript
复制
startKey=["box","pag"]&endKey=["box\u02ad","pag\u02ad"]

到目前为止,我还没有确切地发现如何管理子字符串搜索。因为paglxpag的子字符串,所以上面的查询不会返回任何结果。有什么想法吗这件事?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31297032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档