2017-02-13 4 views
1

これは私がデータベースに挿入した文書です。MarkLogicのxml間の関係を定義し、検索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> 

は私が"MEDIA1"として<media>にと<medianame>"ディキシット" として<biblio><name>を持つそれらの文書を検索したいです。

しかし、それは<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")に一致し、結果からメディアID(456)を抽出し、取得したメディアID(456)とメディア名(media1)を含むメディアドキュメントをクエリします。

しかし、これを検索:検索APIで実現したいと考えています。

これを実現する方法はありますか、xmlの要素間の関係を定義できる場所はありますか?

+0

私はあなたがたった一つの 'search:seach'呼び出しでこれを行うことはできないと思います。なぜあなたは1つのクエリでドキュメントとメディアを混ぜたいのですか?私はあなたが輸出目的のためにこれを望むかもしれないと想像することができます.. – grtjn

答えて

4

media:idに範囲索引を追加すると、超高速ジョインを実行できます。それは戦闘の1/2です。

残りの半分は次のとおりです。これを問題にするには、ctsとxQueryを使用します。

しかし、これを検索の一部として実行したい場合は、カスタム制約を使用して検索します。

可能カスタム制約:ドキュメントのクエリ:問題の名前のメディア書誌参照

  • リターンCTへ
  • 解決これをため 書誌・バイ・メディア名

    • 検索* biblioの文書の

    また、「biblio-name」という名前のビブリオ名にも制約があった場合、次の例のような検索を行うことができます最終的に検索API経由で配信されます。

    biblio-name:Dixit AND biblio-by-media-name:media1 
    

    ※document-queryは1つのアプローチです。しかし、私はおそらく、biblio URIではなく、biblioファイルのmediaid要素の範囲クエリでこれを構築します。しかしそれはチューニングのすべてです。上記のより単純な例では、結果は同じになります。

    https://docs.marklogic.com/guide/search-dev/search-api#id_49750

  • +0

    あなたの貴重な答えのためにデイヴィッドありがとう。 ちょうど知識のために、あなたはctsとxQueryでそれをどうやってやるのか知りたいと思います。 –

    +0

    あなたは大歓迎です。cts/xQueryの場合、基本的にカスタム制約に使用されているのと同じ関数を使用します。検索層をすべて削除するそれは意味がありますか? –

    関連する問題