Используя CouchDB-Lucene, как я могу индексировать массив объектов (не значений) - PullRequest
0 голосов
/ 07 сентября 2011

Привет всем и заранее спасибо за любые идеи, предложения или ответы.

Во-первых, среда: я использую 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.Я использую слово index очень свободно, потому что мне действительно все равно, что я могу его найти, я просто хочу «сохранить» его, чтобы он возвращался с результатами поиска.В любом случае, свойство представляет собой массив объектов json.Теперь эти json-объекты, составляющие массив, всегда будут иметь одно свойство json.

Основываясь на моем понимании couchdb-lucene, мне нужно сократить этот массив до строки, разделенной запятыми.Я ожидаю, что что-то вроде «group-administrator: 31, group-users: 3» будет конечным выводом.

Таким образом, мой вопрос по существу: Как я могу уменьшить массив $ usagerights json вышена разделенную запятыми строку ключ: значение в проектном документе couchdb, используемую couchdb-lucene?

Предыдущий вопрос, который я опубликовал относительно индексации тегов в аналогичной ситуации, предоставлен для справки: Как индексировать массивы (теги) в CouchDB с помощью couchdb-lucene

Наконец, если вам нужны какие-либо дополнительные сведения, просто оставьте комментарий, и я предоставлю его.

Ответы [ 2 ]

3 голосов
/ 07 сентября 2011

Может быть, я что-то упускаю, но единственное отличие, которое я вижу из вашего предыдущего вопроса, заключается в том, что вы должны перебирать объекты.Тогда код должен быть:

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;
}
2 голосов
/ 07 сентября 2011

Нет необходимости преобразовывать в разделенный запятыми список значений (я был бы заинтригован, узнав, где вы взяли эту идею).

Если вы просто хотите, чтобы элемент $ usagerights возвращался с вашими результатами, сделайте это;

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

Lucene хранит строки, а не JSON, поэтому вам потребуется JSON.parse-строка при запросе.

...