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 オブジェクトには、常に 1 つの json プロパティがあります。

couchdb-lucene に関する私の理解に基づいて、この配列をコンマ区切りの文字列に減らす必要があります。「group-administrators:31,group-users:3」のようなものが最終出力になると思います。

したがって、私の質問は本質的に次のとおりです。上記の $usagerights json 配列を、couchdb-lucene で使用されるように、couchdb 設計ドキュメント内のキーと値のペアのコンマ区切りの文字列に減らすにはどうすればよいですか?

参照用に提供された、同様の状況でのタグ付けのインデックス作成に関して投稿した以前の質問: How-to index arrays (tags) in CouchDB usingouchdb-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 に答える