0

大家好,提前感谢您的任何想法、建议或答案。

一、环境:我使用的是CouchDB(目前在1.0.2上开发)和couchdb-lucene 0.7。显然,我正在使用 couchdb-lucene(以下简称“cl”)在 couchdb 中提供全文搜索。

其次,我给大家提供一个例子couchdb文档:

{
   "_id": "5580c781345e4c65b0e75a220232acf5",
   "_rev": "2-bf2921c3173163a18dc1797d9a0c8364",
   "$type": "resource",
   "$versionids": [
       "5580c781345e4c65b0e75a220232acf5-0",
       "5580c781345e4c65b0e75a220232acf5-1"
   ],
   "$usagerights": [
       {
           "group-administrators": 31
       },
       {
           "group-users": 3
       }
   ],
   "$currentversionid": "5580c781345e4c65b0e75a220232acf5-1",
   "$tags": [
       "Tag1",
       "Tag2"
   ],
   "$created": "/Date(1314973405895-0500)/",
   "$creator": "administrator",
   "$modified": "/Date(1314973405895-0500)/",
   "$modifier": "administrator",
   "$checkedoutat": "/Date(1314975155766-0500)/",
   "$checkedoutto": "administrator",
   "$lastcommit": "/Date(1314973405895-0500)/",
   "$lastcommitter": "administrator",
   "$title": "Test resource"
}

第三,让我解释一下我想做什么。我试图弄清楚如何索引“$usagerights”属性。我非常松散地使用索引这个词,因为我真的不关心能够搜索它,我只是想“存储”它,以便它与搜索结果一起返回。无论如何,该属性是一个 json 对象数组。现在,组成数组的这些 json 对象将始终具有一个 json 属性。

根据我对 couchdb-lucene 的理解,我需要将此数组简化为逗号分隔的字符串。我希望像“group-administrators:31,group-users:3”这样的最终输出。

因此,我的问题本质上是:如何将上面的 $usagerights json 数组减少为 couchdb-lucene 使用的 couchdb 设计文档中的逗号分隔的键:值对字符串?

我之前发布的关于在类似情况下对标记进行索引的问题,仅供参考:How-to index arrays (tags) in CouchDB using couchdb-lucene

最后,如果您需要任何其他详细信息,请发表评论,我会提供。

4

2 回答 2

3

也许我遗漏了一些东西,但我从您之前的问题中看到的唯一区别是您应该迭代对象。那么代码应该是:

function(doc) {
  var result = new Document(), usage, right;
  for(var i in doc.$usagerights) {
    usage = doc.$usagerights[i];
    for(right in usage) {
      result.add(right + ":" + usage[right]);
    }
  }
  return result;
}
于 2011-09-07T09:48:46.307 回答
2

不需要转换为以逗号分隔的值列表(我很想知道您是从哪里得到这个想法的)。

如果您只是希望 $usagerights 项目与您的结果一起返回,请执行此操作;

ret.add(JSON.stringify(doc.$usagerights),
  {"index":"no", "store":"yes", "field":"usagerights"});

Lucene 存储字符串,而不是 JSON,因此您需要 JSON.parse 查询字符串。

于 2011-09-07T10:13:41.890 回答