2016-05-12 14 views
0

既存の要素範囲インデックスと一連の単語の間の最適化をどのようにして得ることができますか?要素範囲インデックスとの交差点を取得

私のここでのポイントはメモリの最適化に焦点を当てています。私はcts:element-valuesを使用してデータを取得し、マップオブジェクトを使用してジョブを実行できることを知っています。キャッシュされた範囲の索引とのこの交差を直接行う照会がある場合、なぜそれをすべきですか?

例:

レンジ指数(TEST1、TEST2、TEST3) /シーケンス(TEST1、TEST4、TEST5)

クエリ結果= test1の

この範囲のインデックスは、単語のために作成することを知っリストは1つの文書に存在します。私は断片化を避けるだけでなく、別々の文書にそれらを置かないようにしようとしています。

答えて

1

私はこれがあなたのためのトリックを行います信じる:以下のコメントパー

let $myIndex := "myIndex" 

let $sequence := ("one", "two two", "three") 

let $or-query := cts:or-query(($sequence ! cts:word-query(.))) 

return 
    cts:element-values(xs:QName($myIndex),(),(), cts:element-query(xs:QName($myIndex), $or-query)) 

を、それがハッキングのビットだが、私は、私はこれで望ましい結果であると考えているものを達成することができました:

fn:distinct-values(
    cts:search(//lastname, 
     cts:or-query(($sequence ! 
     cts:element-query(xs:QName("lastname"), 
      cts:element-value-query(xs:QName("lastname"), ., "self") 
     ) 
    )) 
)/string() 
) 

最初のXPathをelement-queryの目的の要素とQNameに変更するだけです。要素値よりも速いかどうか、地図の各値をチェックすることで、私はあなたに伝えられませんでした。

これらの値が実際にそれらを格納するための単一のドキュメントにのみ存在する場合は、データベースの断片化戦略を変更することができます。それで私のアプローチ#1はうまくいくはずです。 [これから生じる可能性のある意図しない結果についての義務的な免責事項]

+0

ありがとうございます@ロブS.、私はあなたに同意します。このクエリは、すべての範囲インデックスエントリを返します。 –

+0

こんにちは@Ahmad Tamimi、試してみるコードの別のスニペットで私の答えを更新しました。がんばろう! –

+0

こんにちは、@ロブS.、もう一度ありがとうございます。これは私のために働く。しかし、xPathを使用してこのクエリを実行してからマップオブジェクトを使用するよりも時間がかかります。しかし、私はあなたの3番目の推奨アプローチがパフォーマンスに影響を与えずに必要な仕事をすると信じています。 –