大家好,并提前感谢任何想法,建议或答案。
首先,环境:我正在使用CouchDB(目前正在开发1.0.2)和couchdb-lucene 0.7。显然,我使用couchdb-lucene(以下简称“c-l”)在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设计文档中逗号分隔的key:value对的字符串? < / p>
我发布的关于类似情况下标记索引的上一个问题,供参考:How-to index arrays (tags) in CouchDB using couchdb-lucene
最后,如果您需要任何其他详细信息,请发表评论,我会提供。
答案 0 :(得分: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;
}
答案 1 :(得分:2)
没有要求转换为以逗号分隔的值列表(我很想知道你从哪里得到这个想法)。
如果您只想在结果中返回$ usagerights项,请执行此操作;
ret.add(JSON.stringify(doc.$usagerights),
{"index":"no", "store":"yes", "field":"usagerights"});
Lucene存储字符串,而不是JSON,因此您需要在查询时使用JSON.parse字符串。