CouchDB испускает с ключом поиска, который является массивом, таким образом, порядок элементов массива игнорируется - PullRequest
1 голос
/ 09 января 2011

При индексации представления couchdb вы можете использовать массив в качестве ключа, например: emit (["one", "two", "three"], doc);Я ценю тот факт, что при поиске в представлении важен порядок, но иногда я хотел бы, чтобы представление игнорировало его.Я подумал о паре вариантов.1. По соглашению, просто отправьте содержимое в алфавитном порядке и убедитесь, что поиск использует то же соглашение.2. Каким-то образом хешировать, игнорируя порядок, и генерировать / искать на основе этого хеша.(Это довольно просто, если вы просто хешируете каждый из них по отдельности, «суммируете» хеши, а затем мод.) Примечание: я уверен, что это может быть описано где-то в авторитетном руководстве, но мне не удалось его найти.

Ответы [ 2 ]

1 голос
/ 10 января 2011

Похоже, что правильный подход - это определить обычный порядок ключей, выдать их в этом порядке и обязательно выполнить запрос с применением этого порядка. В противном случае нам нужно было бы испустить все n (факториальные) перестановки ключей (что могло бы испортиться, если n больше 3)

0 голосов
/ 09 января 2011

CouchDB всегда будет поддерживать ключи массива в порядке. Рассматривали ли вы выпуск всех вариаций последовательности как часть представления? Что-то вроде:


function(doc) {
  function computeAllKeyVariations(fromKey) {
    <em>// returns array of key arrays</em>
  }
  var allKeys = computeAllKeyVariations(startingKey);
  for (k in allKeys) {
    emit(k, doc); <em>// or emit(k, null)</em>
  }
}

Примечание: у вас также есть возможность использовать emit(['one','two','three'], null) вместо выдачи документа. Это позволит избежать того, что CouchDB сохранит полный документ в индексе представления (более одного раза). Чтобы получить те же результаты, что и раньше, просто используйте &include_docs=true

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...