Joel、回答ありがとうございます。
実際に私が必要なのは、異なるコレクションからスコアを返し、そのスコアを使っていくつかの計算を行い、最終的に「people」を取得することです。より複雑な例をお見せします。すべてのコレクションが同じサーバー上にあるときには非常に高速ですが、シャーディングが行われると非常に遅くなります。
select(
select(
rollup(
innerJoin(
select(
search(person, q="((((SmartSearchS:"madrid [$CU] [$PRJ] [$REC] "~100)^4 OR (SmartSearchS:"madrid [$CU] [$PRJ] [$RECL] "~100)^3 OR (SmartSearchS:"madrid [$CU] [$PRJ] "~100)^2) OR (((SmartSearchS:(madrid*))) OR ((SmartSearchS:("madrid")))^3)) AND ((*:* -StatusSFD:("***System Delete***")) AND type_level:(parent)))", fl="PersonIDDoc,score", sort="PersonIDDoc desc,score desc", rows="2147483647"),
PersonIDDoc, score as PersonScore
),
select(
rollup(
search(contactupdate, q="(((UpdateTextS:(cto)) AND IsAttachToPerson:(true)) AND (((AssignConfidentialS:(false) OR (AssignAuthorisedEmplIdsS:((cc)))))))", fl="PersonIDDoc,score", sort="PersonIDDoc desc,score desc", rows="2147483647"),
over=PersonIDDoc, sum(score), sum(PersonIDDoc)
),
PersonIDDoc, add(0,0) as DocumetScore, sum(score) as ContactUpdateScore
),
on="PersonIDDoc"
),
over=PersonIDDoc, sum(PersonScore), sum(ContactUpdateScore), count(PersonIDDoc)
),
PersonIDDoc, sum(ContactUpdateScore) as ContactUpdateScore, sum(PersonScore) as PersonScoreTotal, count(PersonIDDoc) as TokenCount
),
PersonIDDoc, TokenCount, add(mult(PersonScoreTotal, 0.6), mult(ContactUpdateScore, 0.4)) as CalculatedScore
)
かなり複雑なクエリであることは理解していますが、単一のシャードで約3秒かかり、シャーディングを行うと基本的に処理が爆発的に遅くなります。
これは、シャーディングされたコレクションではこのような動作を達成できないということなのでしょうか?
よろしくお願いします。