#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, которые там находятся? Существует компромисс между объединением объектов таким образом, чтобы данные, принадлежащие друг другу, хранились вместе, и сохранением каждого микрообъекта отдельно для удобства обновления.