这些是我在数据库中插入的文件。
<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>
的文件作为&#34; Dixit&#34; 和<media>
<mediaid>
搜索为的&#34; Media1中&#34;
但它应该只检查那些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>
与我们的情况一样,结果将是
s
我可以实现这一点,首先让所有与名称匹配的biblio文档(&#34; dixit&#34;)然后从结果中我将提取媒体代码(456),然后查询媒体具有获取的mediaid的文档(456)和中间名(media1)。
但我希望通过搜索来实现这一目标:搜索API。
有没有办法让这种情况发生,是否有任何地方可以定义xmls元素之间的关系。
答案 0 :(得分:4)
如果你在media:id上放置一个范围索引,那么你将能够进行一些超快速连接。这是战斗的1/2。
另一半是:如果我想这样做有问题,我会通过cts和xQuery来做。
但是:如果我确实想在搜索中执行此操作:搜索,我会使用自定义约束来执行此操作 - 然后通过搜索:搜索库自然地调用它们。
可能的自定义约束: biblio-by-media-name
然后,如果我对biblio-name也有一个约束,名为&#34; biblio-name&#34;然后我可以搜索类似下面的例子 - 最后通过搜索api传递:
biblio-name:Dixit AND biblio-by-media-name:media1
*请注意,文档查询是一种方法。但是,我可能不是在biblio URI上构建它,而是在biblio文件中的mediaid元素上进行范围查询。但这完全是关于调整。在上面更简化的例子中,结果将是相同的。
https://docs.marklogic.com/guide/search-dev/search-api#id_49750