Saya harus menambahkan kemampuan pencarian geo-spasial ke aplikasi yang sudah ada yang menggunakan pencarian: API pencarian dan memiliki pencarian teks lengkap dan pencarian segi. Saya sudah membaca tentang Memperluas API Penelusuran, namun saat ini saya tidak punya waktu. Jadi, saya pikir saya akan mengadaptasi kode saya untuk melakukan perpotongan dua rangkaian hasil (satu dikembalikan oleh pencarian: API pencarian dan yang lainnya dikembalikan oleh cts:search
yang memungkinkan pencarian cts:polygon
). Sayangnya persimpangan tersebut sangat menurunkan waktu eksekusi. Apakah ada cara yang lebih baik untuk mengoptimalkan atau mempercepat ekspresi berikut di bawah ini?
$results_fts//search:result[./search:metadata/Vhe eq $geo_results//root/Vhe]
Ini kode saya:
declare variable $geo_results :=
let $qr := cts:search(doc(), cts:and-query(($q-geospatial,
cts:word-query("*", ("case-insensitive","whitespace-insensitive","wildcarded","diacritic-insensitive")) )) ) (:Search all * within the polygon:)
return $qr;
declare variable $results_fts :=
let $qrs := search:search($q-text, $options, xs:unsignedLong(xdmp:get-request-field("start","1")), 12000) (:max page length to get all records:)
return $qrs;
declare variable $results :=
let $qrt := if (xdmp:get-request-field("map-code")) then
(:intersect geospatial search with the full text search:)
<search:response>
{ $results_fts//search:result[./search:metadata/Vhe eq $geo_results//root/Vhe] }
{ $results_fts//search:facet }
{ $results_fts//search:qtext }
{ $results_fts//search:metrics }
</search:response>
else $results_fts
return $qrt;