これは、MarkLogicの初心者向けの質問です。このようなxml構造を想像してみてください。これは、私の実際のビジネス上の問題の凝縮です。
<Person id="1">
<Name>Bob</Name>
<City>Oakland</City>
<Phone>2122931022</Phone>
<Phone>3123032902</Phone>
</Person>
ドキュメントには複数のPhone要素を含めることができます。
電話番号のリストのいずれかに一致するPhone要素を持つすべてのドキュメントから情報を返す必要があります。リストには、数十の電話番号が含まれている場合があります。
私はこれを試しました:
let $a := cts:word-query("3738494044")
let $b := cts:word-query("2373839383")
let $c := cts:word-query("3933849383")
let $or := cts:or-query( ($a, $b, $c) )
return cts:search(/Person/Phone, $or)
これはクエリを適切に実行しますが、Results要素内に一連のPhone要素を返します。代わりに、一致するすべてのドキュメントについて、Person要素からid属性とともにすべてのName要素とCity要素を返すことが私の目標です。例:
<results>
<match id="18" phone="2123339494" name="bob" city="oakland"/>
<match id="22" phone="3940594844" name="mary" city="denver"/>
etc...
</results>
したがって、このブールcts:search
機能の両方を可能にするだけでなく、各ドキュメントのどの部分が返されるかを指定できるような形式が必要だと思います。その時点で、結果をさらに処理することができます。これを効率的に行う必要があるので、たとえば、ドキュメントURIのリストを返し、ループ内の各ドキュメントをクエリするのは効率的ではないと思います。ありがとう!XPATH