4

我需要一些关于在 couchdb 中进行全文搜索的指导。它是否已经在 2.0 中默认启用,还是我们必须重建 couchdb 启用它?

场景:它是一个文档管理系统,文档以网格的形式显示。我需要能够对结果进行排序。在从地图减少到弹性索引的几次更改之后,现在我正在尝试使用芒果查询。问题是排序没有给出预期的结果。

{
  "selector": {
    "directoryName": {
      "$eq": "mail\\test\\inbox"
    }},
    "sort": [{"subject": "asc"}]
}

尝试按“主题”或其他文本字段排序,将结果与“索引逻辑”混合(例如:返回的排序主题:“这封电子邮件......”,“你好......”,“这封电子邮件...... .”,绝对不是我需要的)。不记得分析器、令牌等是否与“奇怪”的搜索结果有关。例如,使用日期字段 desc 排序,它的效果要好得多,但是在显示 2017 年到 desc 的文档时,我有一个 2014 年文档的“入侵者”结果,其中包含 2016 年和 2015 年的文档。

我为一些可能的文档排序字段创建了 json 类型的索引。创建文本类型索引不起作用。我不知道全文搜索会解决我的“排序”问题,但是考虑到所有对 cloudant 查询语言和全文搜索的引用,我认为这个功能包含在 2.0 中。

4

2 回答 2

9

CouchDB 本身没有内置全文索引器。您可以使用 mango 做很多事情,但专用的全文索引器可能会为您提供更好的服务。

两个最常见的选项是:couchdb-luceneelasticseach

于 2017-03-21T21:26:34.200 回答
0

经过一段时间的搜索并失败后,我终于有了一些工作系统,如果有人想要全文搜索,请告诉我任何评论,也许你可以尝试,(删除所有评论并复制然后粘贴)

function (doc) {
  var prefix;
  for(prop in doc){
    if(prop=="_id"||prop=="_rev") // ignore _id, _rev or any unwanted properties
    continue;
    if(!Date.parse(doc[prop])) //ignore if it's a date type 
         prefix += doc[prop];
    else if(!isNAN(doc[prop])) // accept if it's a number type
        prefix += doc[prop];
    else if(typeof(doc[prop]!=="boolean") //ignore if it's a boolean type
        prefix += doc[prop];
  }
    var i;
    if (prefix) {
        for (i = 0; i < prefix.length; i += 1) {
            emit([prefix.slice(i)], doc);
        }
    }
//searchText?startkey=["abc"]&endkey=["abc\u9999"]&reduce=false&skip=0&limit=3

于 2017-12-18T17:37:03.797 回答