search::indexer (private)
search::indexer
Defined in packages/search/tcl/search-procs.tcl
Search indexer loops over the existing entries in the search_observer_queue table and calls the appropriate driver functions to index, update, or delete the entry.
- Authors:
- Neophytos Demetriou
- Jeff Davis <davis@xarg.net>
- Partial Call Graph (max 5 caller/called nodes):
- Testcases:
- No testcase defined.
Source code: set driver [search::driver_name] if { $driver eq "" } { # # Nothing to do if no driver # return } # JCD: pull out the rows all at once so we release the handle foreach row [db_list_of_lists search_observer_queue_entry {}] { # DRB: only do Oracle shit for oracle (doh) if { [ns_config "ns/db/drivers" oracle] ne "" } { if {[nsv_incr search_static_variables item_counter] > 1000} { nsv_set search_static_variables item_counter 0 db_exec_plsql optimize_intermedia_index {begin ctx_ddl.sync_index ('swi_index'); end; } } } lassign $row object_id event_date event switch -- $event { UPDATE - INSERT { # Don't bother reindexing if we've already inserted/updated this object in this run if {![info exists seen($object_id)]} { try { search::object_index -event $event -object_id $object_id } on error {errMsg} { ns_log Error "search::indexer: error getting datasource for " "[acs_object_type $object_id]: $errMsg\n[ad_print_stack_trace]" } on ok {d} { # # Remember seeing this object so we can avoid # reindexing it later. # set seen($object_id) 1 } } } DELETE { try { search::object_unindex -object_id $object_id } on error {errMsg} { ns_log Error "search::indexer: error unindexing $object_id " "[acs_object_type $object_id]: $errMsg\n[ad_print_stack_trace]" } # # Unset "seen" element since one could conceivably # delete one but then subsequently reinsert it (e.g. # when rolling back/forward the live revision). # unset -nocomplain seen($object_id) } } # Don't put that dequeue in a default block of the switch above # otherwise objects with insert/update and delete operations in the same # run would crash and never get dequeued search::dequeue -object_id $object_id -event_date $event_date -event $event } ns_log notice "SEARCH INDEXER END [clock format [clock seconds]]"XQL Not present: PostgreSQL Generic XQL file: <fullquery name="search::indexer.search_observer_queue_entry"> <querytext> select object_id, event_date, event from search_observer_queue order by event_date asc limit 50 </querytext> </fullquery>packages/search/tcl/search-procs.xql
Oracle XQL file: <fullquery name="search::indexer.search_observer_queue_entry"> <querytext> select object_id, event_date, event from search_observer_queue where rownum < 100 order by event_date asc </querytext> </fullquery>packages/search/tcl/search-procs-oracle.xql