marklogicの検索機能を使用して検索ページを作成しました。現在、XQueryを実行して検索結果をsearch:search
にしています。Marklogicでの検索のコンテキストとしてのデータ関係
xquery version "1.0-ml";
import module namespace search = "http://marklogic.com/appservices/search"
at "/MarkLogic/appservices/search/search.xqy";
search:search('test',
<options xmlns='http://marklogic.com/appservices/search'></options>)
この検索は、多くのケースで結構ですデータベース内のすべてのコンテンツを検索します裸の骨の一例として、このコードを参照してください。それ以外の場合は、cts:collection-query
のコレクションに基づいて検索します。コレクションは私の検索のための素晴らしい文脈として役立ちます。
ここでは、「メイン」ドキュメントのデータの関係に基づいて検索結果を制限したいと考えています。この「メイン」ドキュメントは、オブジェクトモデル内のすべての関係を持ちます。そのオブジェクトモデルにドキュメントへの参照がある場合、そのドキュメントを検索に含めます。本質的に、「主」/モデル文書は検索のコンテキストです。
私はこれに最も良い方法のいくつかのアイデアを考え出すことを試みていました。ここで私は、これまでに作ってみたものだが、私はMarklogicと誰かがより身近期待していた(私は6ヶ月のためにそれに取り組んできました)良い方向に私を導くことができます:
- すべての文書を追加します。固有のコレクションにモデルドキュメントで参照されています。その後、そのコレクションに基づいて検索を行います。ただし、モデルが変更されたときにコレクションを更新する必要があります。
- モデル文書を自分のコードに読み込んで、すべての参照のリストを取得し、
cts:document-query
(または同様のもの)によってクエリに追加します。 - 私のXML文書のなんらかの形で私の "モデル"の概念を再構成します。
ご意見ありがとうございました。
#1で終了しました。 #2は私のデータベースで約3倍遅かった。また、XMLの膨大なリレーションシップモデルのため、#2のコードは醜いものになり始めました。コレクションを導入することで、すべての開発者が簡単に再利用できるようになりました。私は、将来、トリガーを実装する可能性が最も高いでしょう。 – Paul