Index: openacs-4/packages/search/tcl/search-init.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/search/tcl/search-init.tcl,v diff -u -r1.5 -r1.6 --- openacs-4/packages/search/tcl/search-init.tcl 22 Sep 2003 19:27:06 -0000 1.5 +++ openacs-4/packages/search/tcl/search-init.tcl 27 Apr 2004 12:09:18 -0000 1.6 @@ -1 +1 @@ -ad_schedule_proc -thread t [parameter::get_from_package_key -package_key search -parameter SearchIndexerInterval -default 60 ] search_indexer +ad_schedule_proc -thread t [parameter::get_from_package_key -package_key search -parameter SearchIndexerInterval -default 60 ] search::indexer Index: openacs-4/packages/search/tcl/search-procs-oracle.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/search/tcl/search-procs-oracle.xql,v diff -u -r1.4 -r1.5 --- openacs-4/packages/search/tcl/search-procs-oracle.xql 1 Aug 2002 13:35:09 -0000 1.4 +++ openacs-4/packages/search/tcl/search-procs-oracle.xql 27 Apr 2004 12:09:18 -0000 1.5 @@ -3,7 +3,7 @@ oracle8.1.6 - + declare begin Index: openacs-4/packages/search/tcl/search-procs-postgresql.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/search/tcl/Attic/search-procs-postgresql.xql,v diff -u -r1.3 -r1.4 --- openacs-4/packages/search/tcl/search-procs-postgresql.xql 1 Aug 2002 13:35:09 -0000 1.3 +++ openacs-4/packages/search/tcl/search-procs-postgresql.xql 27 Apr 2004 12:09:18 -0000 1.4 @@ -3,7 +3,7 @@ postgresql7.1 - + select search_observer__dequeue( :object_id, Index: openacs-4/packages/search/tcl/search-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/search/tcl/search-procs.tcl,v diff -u -r1.11 -r1.12 --- openacs-4/packages/search/tcl/search-procs.tcl 26 Sep 2003 05:44:51 -0000 1.11 +++ openacs-4/packages/search/tcl/search-procs.tcl 27 Apr 2004 12:09:18 -0000 1.12 @@ -1,45 +1,58 @@ ad_library { - full-text search engine @author Neophytos Demetriou (k2pts@yahoo.com) @cvs-id $Id$ - } -ad_proc search_indexer {} { +namespace eval search {} + +ad_proc -private search::indexer {} { + 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. + @author Neophytos Demetriou } { set driver [ad_parameter -package_id [apm_package_id_from_key search] FtsEngineDriver] - if { [empty_string_p $driver] } { + if {[empty_string_p $driver] + || ! [acs_sc_binding_exists_p FtsEngineDriver $driver]} { # Nothing to do if no driver return } db_foreach search_observer_queue_entry {} { - switch $event { + switch -- $event { INSERT { - set object_type [acs_object_type $object_id] - if {[acs_sc_binding_exists_p FtsContentProvider $object_type]} { - array set datasource [acs_sc_call FtsContentProvider datasource [list $object_id] $object_type] - search_content_get txt $datasource(content) $datasource(mime) $datasource(storage_type) - acs_sc_call FtsEngineDriver index [list $datasource(object_id) $txt $datasource(title) $datasource(keywords)] $driver + # Don't bother reindexing if we've already inserted/updated this object in this run + if {![info exists seen($object_id)]} { + set object_type [acs_object_type $object_id] + if {[acs_sc_binding_exists_p FtsContentProvider $object_type]} { + array set datasource [acs_sc_call FtsContentProvider datasource [list $object_id] $object_type] + search::content_get txt $datasource(content) $datasource(mime) $datasource(storage_type) + acs_sc_call FtsEngineDriver index [list $datasource(object_id) $txt $datasource(title) $datasource(keywords)] $driver + } + # Remember seeing this object so we can avoid reindexing it later + set seen($object_id) 1 } - # Remember seeing this object so we can avoid reindexing it later - set seen($object_id) 1 } DELETE { acs_sc_call FtsEngineDriver unindex [list $object_id] $driver + # unset seen since you could conceivably delete one but then subsequently + # insert it (eg when rolling back/forward the live revision). + if {[info exists seen($object_id)]} { + unset seen($object_id) + } } UPDATE { # Don't bother reindexing if we've already inserted/updated this object in this run if {![info exists seen($object_id)]} { set object_type [acs_object_type $object_id] if {[acs_sc_binding_exists_p FtsContentProvider $object_type]} { array set datasource [acs_sc_call FtsContentProvider datasource [list $object_id] $object_type] - search_content_get txt $datasource(content) $datasource(mime) $datasource(storage_type) + search::content_get txt $datasource(content) $datasource(mime) $datasource(storage_type) acs_sc_call FtsEngineDriver update_index [list $datasource(object_id) $txt $datasource(title) $datasource(keywords)] $driver } # Remember seeing this object so we can avoid reindexing it later @@ -54,15 +67,15 @@ } -ad_proc search_content_get { +ad_proc -private search::content_get { _txt content mime storage_type } { @author Neophytos Demetriou - @param content + @param content holds the filename if storage_type=file holds the text data if storage_type=text holds the lob_id if storage_type=lob @@ -79,16 +92,14 @@ set data [db_blob_get get_file_data {}] } lob { - db_transaction { - set data [db_blob_get get_lob_data {}] - } + set data [db_blob_get get_lob_data {}] } } - search_content_filter txt data $mime + search::content_filter txt data $mime } -ad_proc search_content_filter { +ad_proc -private search::content_filter { _txt _data mime @@ -108,7 +119,7 @@ } } -ad_proc search_choice_bar { items links values {default ""} } { +ad_proc -private search::choice_bar { items links values {default ""} } { @author Neophytos Demetriou } { Index: openacs-4/packages/search/tcl/search-procs.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/search/tcl/search-procs.xql,v diff -u -r1.4 -r1.5 --- openacs-4/packages/search/tcl/search-procs.xql 17 May 2003 11:29:41 -0000 1.4 +++ openacs-4/packages/search/tcl/search-procs.xql 27 Apr 2004 12:09:18 -0000 1.5 @@ -2,23 +2,23 @@ - + select object_id, event_date, event from search_observer_queue order by event_date asc - + select :content as content, 'file' as storage_type from dual - + select :content as content, 'lob' as storage_type Index: openacs-4/packages/search/www/search.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/search/www/search.tcl,v diff -u -r1.11 -r1.12 --- openacs-4/packages/search/www/search.tcl 31 Mar 2004 12:53:07 -0000 1.11 +++ openacs-4/packages/search/www/search.tcl 27 Apr 2004 12:09:18 -0000 1.12 @@ -90,7 +90,7 @@ set object_id [lindex $result(ids) $__i] set object_type [acs_object_type $object_id] array set datasource [acs_sc_call FtsContentProvider datasource [list $object_id] $object_type] - search_content_get txt $datasource(content) $datasource(mime) $datasource(storage_type) + search::content_get txt $datasource(content) $datasource(mime) $datasource(storage_type) set title_summary [acs_sc_call FtsEngineDriver summary [list $q $datasource(title)] $driver] set txt_summary [acs_sc_call FtsEngineDriver summary [list $q $txt] $driver] set url_one [acs_sc_call FtsContentProvider url [list $object_id] $object_type] @@ -142,5 +142,5 @@ } } -set choice_bar [search_choice_bar $items $links $values $current_result_page] +set choice_bar [search::choice_bar $items $links $values $current_result_page]