1

次のクエリは機能しますが、インデックスを使用する代わりにすべてのドキュメントを検索する必要があると思われるため、非常に低速です。

xquery version "1.0-ml";

declare namespace appl="http://ap.org/schemas/03/2005/appl";
declare namespace appls="http://ap.org/schemas/09/2011/applsearch";

let $p := cts:and-query((
      cts:element-range-    query(xs:QName("appls:ArrivalDateTime"),">=",fn:dateTime(xs:date("2003-01-01"), xs:time("00:00:00"))),
      cts:element-range-query(xs:QName("appls:ArrivalDateTime"),"<=",fn:dateTime(xs:date("2003-01-31"), xs:time("23:59:59"))),
      cts:element-value-query(xs:QName("appl:MediaType"), "text")
      ))

let $results := cts:search(fn:doc(), $p, "unfiltered")
return
 for $result in $results

where cts:contains($result//appl:block/appl:p[position()=last()], "information from:")
return fn:document-uri($result)

句読点に依存するオプションをオンにしてcts:element-word-queryを使用してみましたが、スペースの制限のためにデータベースでインデックスを作成しなかったため、機能しなかったと思います。

私がこれをどのようにスピードアップまたは改善するかについての提案があればいいのですが。インデックスを追加することが私の唯一の手段である場合は、管理者に戻って何が可能かを確認できると思いますが、そのルートに進む必要がないことを願っています。

4

3 に答える 3

1

個々の要素の位置を含むインデックスが実際にあるとは思いません。私が恐れている最善の解決策は、appl:p[position()=last()]要素をコピーして一意の名前を付けて、cts:element-value-query直接使用できるようにすることです。

where 句が多くの検知を除外し、それらのケースにappl:p「information from:」という値を持つ a がまったく含まれていない場合は、a を使用するcts:element-word-queryと大いに役立つ可能性があります。

を使用するために必ずしもインデックスが必要なわけではありませんelement-word-queries

チッ!

于 2012-08-06T17:31:52.207 に答える
0

<appl:p last="true">...</appl:p>インデックスを活用して where 句を回避できるように、取り込み時に最後のものにフラグを立てることもできます (例: make it )。

于 2012-08-07T18:45:08.540 に答える