CouchDB ищет связанные документы

#couchdb #couchdb-lucene

#couchdb #couchdb-lucene

Вопрос:

Я очень новичок в couchdb, и я надеюсь, что кто-нибудь сможет помочь мне с решением этой проблемы.

Допустим, у меня есть адресный документ, который содержит различные ключи, но, что важно, однолинейный адрес и массив persons:

 {
  "_id": "002cb726bfe69a79ed9b897931000ec6",
  "_rev": "2-6af6d8896703e9db6f5ba97abb1ca5d7",
  "type": "address",
  ...
  "singleLineAddress": "28 CLEVEDON ROAD, WESTON-SUPER-MARE, BS23 1DG",
  ...
  "persons":["d506d09a1c46e32f6632e6d99a0062bd","002cb726bfe69a79ed9b897931001c80"]
}
 

Затем у меня есть документ person с несколькими ключами, особенно с именем и фамилией:

 {
    "_id": "d506d09a1c46e32f6632e6d99a0062bd",
    "_rev": "4-98fae966a92d5c6c359cb8ddfaa487e1",
    "type": "person",
    ...
    "firstName": "Joe",
    "lastName": "Bloggs"
    ...
}
 

Я понимаю, что могу создать представление связанного документа и указать все идентификаторы пользователя, связанные с адресом, затем я могу использовать include_docs=true, чтобы просмотреть все данные пользователя. Но, из того, что я читаю, не рекомендуется использовать include_docs=true, поскольку это может быть дорого.

В конечном счете, я хотел бы использовать couchdb-lucene для запуска FTS для person @ address, используя имя и адрес. Возможно ли это вообще с использованием связанных документов?

Ответ №1:

Использование ?include_docs=true обходится дороже, чем неиспользование — для каждой строки возвращаемого индекса база данных должна извлекать текст соответствующего документа. Но иногда необходимо обязательно 🙂 Вы можете избежать использования ?include_docs=true , «проецируя» больше данных в индекс, который возвращается вам во время запроса. Видишь https://blog.cloudant.com/2021/11/12/Projection.html

Что касается полнотекстового поиска Lucene, вы, конечно, можете выполнять поиск по типам документов в одной коллекции, но ваши результаты поиска будут состоять из смеси address people документов и — полнотекстовый поиск не может выполнить «соединение» между адресом и его обитателями — вам придется сделать это самостоятельно позже.

Если вам отчаянно нужно вернуть объекты address и people вместе, подумайте о том, чтобы объединить их: ваш документ address будет содержать массив объектов people, которые там находятся? Существует компромисс между объединением объектов таким образом, чтобы данные, принадлежащие друг другу, хранились вместе, и сохранением каждого микрообъекта отдельно для удобства обновления.