Как определить связь между xmls в MarkLogic и использовать ее при поиске API?
Это документы, которые я вставил в базу данных.
<biblio>
<biblioid>123</biblioid>
<mediaid>456</mediaid>
<name>dixit</name>
<title>title</title>
</biblio>
<biblio>
<biblioid>456</biblioid>
<mediaid>789</mediaid>
<name>singla</name>
<title>title1</title>
</biblio>
<media>
<mediaid>456</mediaid>
<mediaName>media1</mediaName>
<title>hello</title>
</media>
<media>
<mediaid>789</mediaid>
<mediaName>media1</mediaName>
<title>hello</title>
</media>
<media>
<mediaid>384</mediaid>
<mediaName>media2</mediaName>
<title>hello</title>
</media>
Я хочу искать эти документы, имеющие <name>
в <biblio>
как "Диксит" и <medianame>
в <media>
как "media1".
Но он должен проверять только те документы, которые имеют <mediaid>
такой же как в biblio/mediaid
Как и в нашем случае, результат будет
<biblio>
<biblioid>123</biblioid>
<mediaid>456</mediaid>
<name>dixit</name> <!-- name is matching ("dixit")-->
<title>title</title>
</biblio>
<media>
<mediaid>456</mediaid> <!-- mediaid is same as in biblio/mediaid -->
<mediaName>media1</mediaName> <!-- medianame is matching ("media1") -->
<title>hello</title>
</media>
Я могу добиться этого, сначала получив все библиографические документы, соответствующие названию ("dixit"), затем из результатов я извлеку mediaid (456), а затем запросю медиа документы с извлеченными mediaid (456) и medianame(media1).,
Но я хочу добиться этого с помощью поиска: поиск API.
Есть ли способ сделать это и есть ли место, где я могу определить отношения между элементами xmls.
1 ответ
Если вы поместите индекс диапазона на media:id, вы сможете сделать несколько сверхбыстрых объединений. Это половина битвы.
Другая половина: если бы я хотел сделать это проблематично, я бы сделал это с помощью cts и xQuery.
НО: если бы я хотел сделать это как часть search:search, я бы сделал это с пользовательскими ограничениями, а затем вызвал бы их через библиотеку search: search.
Возможное пользовательское ограничение: biblio-by-media-name
- поиск медиа с указанным именем
- решить это в библиографии
- вернуть ct:document-query* из библиографических документов
Тогда, если бы у меня также было ограничение на biblio-name, называемое "biblio-name", тогда я мог бы выполнить поиск, подобный приведенному ниже примеру, и все было доставлено через API поиска в конце:
biblio-name:Dixit AND biblio-by-media-name:media1
* Обратите внимание, что документ-запрос является одним из подходов. Тем не менее, я мог бы построить это не на URI библиотеки, а на запросе диапазона к элементу mediaid в файлах библиотеки. Но это все о тюнинге. Результаты будут такими же, как в более упрощенном примере выше.