En aplicaciones 289 El alcance de la bsqueda es el siguiente: Base de Datos solamente se buscar en las tablas asociadas a transacciones definidas como Business Component (ttulo y valor almacenado en sus atributos). Todo archivo almacenado en el disco duro. Es posible habilitar este mecanismo de bsqueda a los usuarios finales de una aplicacin generada. Full Text Search En una aplicacin generada 290 290 Full Text Search Propiedad Searchable: A nivel de las propiedades del Generador. A nivel de las propiedades de cada Business Component Propiedades a nivel del Generador: Searchable: Si se configura en su valor True, indica que toda Transaccion dentro de la KB definida como Business Component ser searchable. Puede modificarse el valor a nivel de cada BC, si se desea. Search Engine: Indica el motor de bsqueda que se utiliza. Esta propiedad solo queda habilitada si se estableci el valor True en la propiedad Searchable. Index directory: Indica el directorio donde se almacenarn los ndices para la bsqueda. Esta propiedad solo queda habilitada si se estableci el valor True en la propiedad Searchable. Propiedades a nivel de cada BC: Searchable Transaction: Search viewer Transaction: Es el visor asociado a la Transaccin cuando el resultado de la bsqueda involucra a la misma Transaccin. Es un objeto GeneXus que recibir como parmetro la clave primaria de la Transaccin. Por defecto, el objeto que se carga es: * La vista de la Transaccin a travs del pattern Work With (si es que se aplic este pattern) * La propia Transaccin en su modo Dsplay (si no hay pattern Work With aplicado) 291 291 Full Text Search Tipos de datos y funciones Funcin Search: TextSearch.Find(Char &query,Num &ItemsPerPage,Num &PageNumber): SearchResultItem Collection Funciones de indexado: TextSearch.Add(BC|File|Char,ContentInfo &info): Boolean TextSearch.Update(BC|File|Char,ContentInfo &info):Boolean TextSearch.Delete(BC|File|Char):Boolean TextSearch.Reindexall():Numeric Otras funciones: TextSearch.BuildDictionary() TextSearch.CheckSpell() TextSearch.HTMLPreview() Para poder realizar Full Text Search, previamente los datos se deben indexar. Opcionalmente se puede armar el contenido a indexar, por lo cual se usa el tipo de datos ContentInfo. De lo contrario, cuando se invoque a las funciones de indexacin el contenido a indexar tomar valores default. El significado de las propiedades de ContentInfo y los valores default se explican a continuacin: ContentInfo Properties: Id (character) : Clave del documento utilizada para recuperar el objeto desde su lugar de origen. Valores por defecto: - BC: Nombre de la Trn +Claves de la Trn - Archivo: Nombre completo del archivo Viewer (character) : URL indicada para desplegar el resultado de una bsqueda. Valores por defecto: - BC: Valor de la propiedad Search Viewerasociada a la Transaccin - Archivo: File path Type (character) : Identificador de tipo. Valores por defecto: - BC: Nombre de la Transaccin - Archivo: GxFile Title (character) : Ttulo del contenido. Valores por defecto: - BC: Description Attribute de la Transaccin definida como BC. - Archivo: Nombre del archivo (File name) 292 SearchResultItem representa el resultado de la bsqueda. Cada una de sus propiedades se mapea con una del tipo ContentInfo, que corresponde precisamente al valor con el cual fue indexado el contenido encontrado. SearchResult: Es coleccin de SearchResultItem SearchResultItem Properties: Title (character) : Titulo del contenido Viewer (character) : URL indicada para desplegar el resultado de una bsqueda. Id (Character) : Clave del documento utilizada para recuperar el objeto desde su lugar de origen. Score (numeric) : Es un numero mayor que 0 y menor o igual a 1. Indica que tan cerca el documento verifica el patrn de bsqueda. Por defecto, el resultado de la bsqueda es ordenado por el Score. TimeStamp (DateTime) : TimeStamp de lo ltimo que se index. Type (character) : Identificador del tipo. MaxItems (numeric) : Cantidad mxima de items encontrados. ElapsedTime (Numrico) : Tiempo en milisegundos que tardo la bsqueda Search Function: TextSearch.Find(Character Content, [optional] Numeric ItemsPerPage, [optional] Numeric PageNumber) : collection of SearchResultItem Index Functions: TextSearch.Add( Variable (BC | File | string) [, ContentInfo info]):Boolean Agrega contenido al ndice. TextSearch.Update(Variable (BC | File | string) [, ContentInfo info]):Boolean Elimina contenido si ya existe y luego inserta el nuevo contenido. TextSearch.Delete(Variable (BC | File | string)):Boolean Elimina el contenido del ndice. TextSearch.Reindexall():Numeric Indexa todo el contenido de las tablas definidas en GeneXus como Searchable Business Components. 293 Full Text Search Event 'Search' &SearchResult = TextSearch.Find(&searchpattern) for &SearchResultItem in &SearchResult.Items() &title =&searchResultItem.Title &title.Link =&searchResultItem.Viewer &file.Source =&SearchResultItem.Id //&file es de tipo File. &preview =TextSearch.HTMLPreview(&file,&searchpattern,'HTML','<span STYLE="COLOR: red"> ','</span>',200,1) SearchResultsGrid.load() endfor EndEvent Ejemplos 1. Bsqueda en archivos del file system: &SearchResult es de tipo SearchResult &SearchResultItem es de tipo SearchResultItem &File es de tipo File La lgica de bsqueda es siempre igual, independientemente de si el resultado encontrado sea un archivo o datos de la base de datos. Esto es porque la informacin se almacena en los mismos ndices. De todas maneras, se puede discriminar mediante la propiedad Type de SearchResultItem si el resultado obtenido es un archivo o datos de una tabla. Mediante este ejemplo se realiza una bsqueda por &searchpattern, sabiendo que los resultados encontrados son archivos, y se obtiene el Title y Viewer del resultado de la bsqueda para ser visualizados. 294 2. Bsqueda en la base de datos Full Text Search Sub 'Paging' &SearchResult = TextSearch.Find(&searchpattern,&items,¤tpage) for &SearchResultItem in &SearchResult.Items() &title =&searchResultItem.Title &title.Link =&searchResultItem.Viewer &type =&searchResultItem.Type &score =&SearchResultItem.Score &TimeStamp =&SearchResultItem.TimeStamp if &type =Airline' &Airline.Load(&SearchResultItem) &preview =TextSearch.HTMLPreview(&Airline,&searchpattern,'HTML','<span STYLE="background: yellow">','</span>',200,1) endif grid1.Load() endfor EndSub &SearchResult es de tipo SearchResult &SearchResultItem es de tipo SearchResultItem &Airline es de tipo Airline (Business Component) Event 'Previous' if ¤tpage >1 ¤tpage -=1 do 'Paging' endif EndEvent En este ejemplo se consulta la propiedad Type de SearcResultItempara que en caso de ser un Business Component de tipo Airline se pueda armar un preview con la informacin recuperada. En particular este cdigo es una subrutina que se invoca para realizar un paginado sobre los resultados encontrados. Por ms informacin consultar: http://wiki.gxtechnical.com/commwiki/servlet/hwikibypageid?5278