Freitag, 20. Mai 2011

Oracle Secure Enterprise Search 11.1.2.2 ist verfügbar

Es gibt wieder eine neue Version von OSES, wie immer verfügbar auf OTN. Die Liste der Neuerungen ist lang:

New Features in Release 11.1.2
Many enhancements have been made to the product architecture. In addition, new
features have been added, some controlled by the administrator, and others that can be
configured by the end users.

Architectural Enhancements
■ The Oracle SES midtier has moved from OC4J to Oracle WebLogic Server. This
entails changes to the steps involved in configuring Single Sign-On and SSL. See
Chapter 11, "Security in Oracle Secure Enterprise Search" for more information on
Single Sign-On and SSL configuration.
■ Oracle Text index structure is enhanced to provide faster query response time.
Changes to index structure improves the performance of Oracle Text significantly.
This option is enabled by default in Oracle SES, and results in significant
improvement in the response time of the query engine.
Oracle SES index fragmentation level remains low even with active crawler
activities.

Deprecated Connectors
The following connectors are deprecated in this release, so that maintenance will be
provided only when issues are raised by existing customers. No active development,
testing, or certification will be provided for any of these connectors.
■ FileNet Image Server
■ FileNet P8 Content Engine
■ Open Text LiveLink Enterprise Server
■ Hummingbird DM
■ IBM DB2 Content Management

New Features for Administrators
■ You can now use the Administrator API to manage multiple instances of Oracle
SES from a central location. See Oracle Secure Enterprise Search Administration API
Guide for more information.
■ Oracle SES now supports parallel querying and index partitioning. See "Parallel
Query Indexing" on page 4-28. Also see "Parallel Querying and Index Partitioning"
on page 12-13.
■ Space management options have been implemented to enable administrators to set
limits on disk space usage. See "Managing Disk Space Usage" on page 12-1 for
more information.
■ The new Oracle File Change Detector (FCD) significantly reduces the duration of
incremental crawls of NTFS sources. See "Setting Up NTFS Sources for UNIX" on
page 8-14 for more information.
■ OAM based SSO authentication is now available. See "Configuring Secure Search
with OAM Single Sign-On" on page 11-27 for more information.
■ Crawler cache storage in Oracle Database provides a secure, compressed
repository for sensitive information. Caching can be enabled and disabled at the
source level, rather than at the system level. See "Overview of the Oracle Secure
Enterprise Search Crawler" on page 4-1 for more information.

New Features for End Users:
■ It is now possible to customize the UI using template files and skins. See
Chapter 10, "Customizing the Search User Interface" for more information.
■ Attribute filter search option is now available directly from the UI. See
"Configuring the Display Options on the Search Page" on page 3-9 for more
information.
■ Any OracleAS Portal page can now contain a secure portlet for Oracle SES. The
search box and search results can appear in the same portlet or in separate portlets.
See "Providing Oracle SES Search in a Secure Portlet" on page 3-15 for more
information.
■ Enhanced Siebel 7.8 connector crawls activities.
■ Support for Activity business component for Siebel 7.8. See "Setting up Siebel 7.8
Sources" on page 9-11 for more information.
■ User authorization cache enhancements improve performance and reduce the
run-time load on target systems. See "User Authorization Cache" on page 11-11 for
more information.
■ Federated authorization cache further improves performance and reduces
redundancy by providing a single cache for all federated systems that have an
identically configured identity or authorization plug-in. See "Federated User
Authorization Cache" on page 11-12 for more information.
■ Oracle SES now has a connector for SharePoint 2007 sources. See "Setting Up
Microsoft SharePoint Sources" on page 7-27 for more information.
■ Oracle SES now has a connector for image files. Oracle SES indexes the metadata
from image files. See "Configuring Support for Image Metadata" on page 4-13 for
more information.
■ Oracle SES now supports Haansoft Hangul documents. See the Oracle Secure
Enterprise Search Release Notes for other changes in document support.
■ Improved messages include displaying the last crawl time for data sources and a
time-out message from federated sources.
■ Japanese tokenization logic has changed to improve Japanese query performance.
■ Connectors have been added to support Oracle Fusion and Oracle WebCenter. See
Chapter 9, "Configuring Access to Applications Sources" for more information.
■ You can now implement Windows native authentication for Oracle SES. See
Chapter 11, "Security in Oracle Secure Enterprise Search" for more information.

Montag, 26. Juli 2010

Thesaurus mit Oracle Secure Enterprise Search nutzen

Mit der new query syntax kann OSES seit 10.1.8.2 auch auf Thesauri zugreifen. Hierzu muss allerdings zunächst ein entsprechender Thesaurus geladen werden. Dieser kann zwar über eine PL/SQL-API erstellt werden, aber einfacher geht das über den Import einer einfachen Textdatei, wie z.B. die folgende thesaurus.txt:

ARD
    NT NDR
    NT WDR
    NT BR
NDR
    SYN Norddeutscher Rundfunk

Zum Laden der Datei stellt Oracle das ctxload Tool zur Verfügung, welches wie folgt benutzt wird:

[oracle@oel5r4 Thesaurus]$ ctxload -thes -name DEFAULT -file thesaurus.txt
Enter user: eqsys/password
Connecting...
Creating thesaurus ARD...
Thesaurus ARD created...
Processing...
6 lines processed successfully
Beginning insert...6 lines inserted successfully
Disconnected

Wichtig ist, dass der Thesaurus-Name DEFAULT ist, andere Thesauri werden von OSES nicht automatisch genutzt.
Sollte es einen Fehler geben und der Vorgang muss wiederholt werden, so muss vorher der bestehende Thesaurus via PL/SQL entfernt werden:

[oracle@oel5r4 Thesaurus]$ sqlplus eqsys/Oracle123

SQL*Plus: Release 11.1.0.7.0 - Production on Mo Jul 26 10:09:45 2010
Copyright (c) 1982, 2008, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - Production
With the Partitioning option

SQL> exec ctx_thes.drop_thesaurus ('ARD');  

PL/SQL procedure successfully completed.

SQL> exit

Die Funktion der Thesaurus-Suche stellt sich dann wie folgt dar. Bei meinen Testdaten ergibt eine Suche nach ARD keine Treffer:


Wird statt dessen der Narrower Term (NT) Operator "<" genutzt, liefert die Suche über die Thesaurus-Expansion entsprechende Treffer:


Auch der Synonym-Operator "~" funktioniert analog dazu. Eine Suche nach NDR gibt nur einen Treffer:


Über die Synonym-Suche wird auch ein weiterer Datensatz mit 'Norddeutscher Rundfunk' gefunden:




Weitere Dokumentation hierzu gibt es unter http://download.oracle.com/docs/cd/E11882_01/text.112/e10945/toc.htm.

Donnerstag, 8. Juli 2010

Search as you type mit OSES

Eine immer häufiger auftauchende Anforderung von Anwendern ist ein search-as-you-type Mechanismus, wie aus dem Internet z.B. von Google bekannt. Deswegen hier ein How-To, wie sich diese Funktionalität auch mit OSES nutzen lässt.

Grundlage ist Googles original search-as-you-type Code, der auf Google Code zur Verfügung gestellt wird (rechts auf der Seite unter 'Featured Downloads': search-as-you-type-v1.2.zip). Da diese Lösung auf php basiert, wird ausserdem der Zend Server Community Edition (CE) benötigt, erhältlich bei Zend.
Im nächsten Schritt muss zunächst der Zend Server installiert werden, unter Linux z.B. nach /opt/zend.
Im zip-File von Google befindet sich ein Ordner sayt, dieser wird dann in das htdocs-Verzeichnis des Zend Severs (z.B. /opt/zend/apache2/htdocs) kopiert. Nach dem starten des Zend Servers (/opt/zend/bin/zendctl.sh start) kann man die erfolgreiche Installation kurz überprüfen, in dem man die Startseite im Browser aufruft (z.B. http://localhost:10088).


Wenn sich der Zend Server erfolgreich gemeldet hat, kann als nächstes ein Test mit Googles Code und den beiliegenden Testdaten erfolgen. Hierzu sind die Zeilen 33 & 34 im readme.txt aus dem Google-Archiv zu berücksichtigen. Die Platzhalter {resourcesPath} und {ajaxResponderUrl} sind entsprechend anzupassen, z.B. wie folgt:

    // The path (beginning of the URL) to the place containing /images and
    // /styles. Should end with a slash.
    // e.g. http://intranet.company.com/search-as-you-type/
    resourcesPath:
      "http://oel5r4:10088/sayt/",

    // The fully qualified URL to the Ajax responder.
    // e.g. http://intranet.company.com/search-as-you-type/responder.php
    ajaxResponderUrl:
      "http://oel5r4:10088/sayt/search-responder.php",

Sofern man bis hier alles richtig gemacht hat, lässt sich die sayt Testseite bereits nutzen, z.B. unter http://localhost:10088/sayt/test.html


Noch liefert diese Seite nur die mitgelieferten Testdaten aus der Datei test-data.txt. Im nächsten Schritt sollen aber die Popular Queries von OSES statt dessen angezeigt werden. Hierzu wird die Datei search-responder.php angepasst. Zunächst kann die Funktion GetData() ab Zeile 30 komplett entfernt werden. Diese liesst lediglich die test-data.txt ein. Auch der Aufruf in Zeile 71 sollte dann entfernt werden.
In der Funktion GetResults() ist jetzt die komplette foreach-Schleife zu entfernen. An dieser Stelle wird statt dessen der folgende Code eingesetzt. Das PASSWORD sowie dahinter der TNS Service sind entsprechend der eigenen OSES-Installation anzupassen

    $conn = oci_pconnect('eqsys', 'PASSWORD', '//oel5r4:1521/ses11g.oel5r4');

    if( !$conn ) {
      echo 'Connection failed';
      $e = oci_error();
      echo $e['message'];
      trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
      exit;
    }

    $sql = "
    select     /*+ FIRST_ROWS(100) */ user_query as name,
                'Popular Queries' as type,
                user_query || '(' || count || ' hits)' as content,
                'http://oel5r4:7777/search/query/search.jsp?skin=sayt&q='||replace(user_query,' ', '+') as moreDetailsUrl
    from
    (
        select    user_query,
                    sum(cnt) as count
        from         eq_test.eq\$sum_stat_popular
        where     lower(user_query) like lower(:qry)
        group by user_query
        order by count desc
    )
    where rownum < 20";


    $stmt = oci_parse( $conn, $sql );
    $query_with_percent = $query . '%';
    oci_bind_by_name( $stmt, ':qry', $query_with_percent );
    oci_execute( $stmt );

    $nrows = oci_fetch_all( $stmt, $res, null, null, OCI_FETCHSTATEMENT_BY_ROW );

    foreach( $res as $col ) {

      $result = array();
      $result['name'] = $col[NAME];
      $result['type'] = $col[TYPE];
      $result['content'] = $col[CONTENT];
      $result['moreDetailsUrl'] = $col[MOREDETAILSURL];
      $result['style'] =
        ($query == strtolower($record[0])) ? 'expanded' : 'normal';
     
      $results[] = $result;
    }   

    oci_free_statement($stmt);

Zuletzt ist in der Definition und beim Aufruf von GetResults noch der nicht mehr benötigte Parameter $data zu entfernen. Ob alles bis hier funktioniert hat, lässt sich wiederum mit der Testseite überprüfen, die jetzt die Suchbegriffe aus OSES liefern sollte:


Was jetzt noch fehlt, ist das Einbinden der sayt-Funktionalität in die OSES Suchseite. Hierzu wird ein in OSES 11g neu hinzu gekommenes Feature genutzt, die sog. skin bundles. Ein fertiges skin bundle steht dazu bereit (Link). Das enthaltene .tgz wird ausgepackt, z.B. im Home-Verzeichnis des oracle-users.
In der Datei sayt.lst müssen die Pfade auf die tatsächliche Position im Filesystem angepasst, danach im Verzeichnis templates die beiden .ftl Dateien geändert werden. Ganz unten in den .ftl-Files befindet sich jeweils die URL des search-as-you-type JavaScripts, die auf die aktuelle URL geändert werden muss.
Dann wird im Verzeichnis skinbundles/sayt das Tool 'searchadmin' gestartet. Dort gibt man das folgende ein:

create skinBundle --NAME=sayt --INPUT_FILE=sayt.xml --ATTACHMENT_LIST=sayt.lst
activate skinBundle --NAME=sayt

Sollte man nachträglich Änderungen am skin bundle vornehmen, können diese wie folgt aktiviert werden:

update skinBundle --NAME=sayt --INPUT_FILE=sayt.xml --ATTACHMENT_LIST=sayt.lst --UPDATE_METHOD=overwrite
deactivate skinBundle --NAME=sayt
activate skinBundle --NAME=sayt

Damit steht die search-as-you-type Funktionalität auch unter Secure Enterprise Search zur Verfügung. Damit das skin bundle benutzt wird, muss es hinter der URL als Parameter mitgegeben werden, z.B. http://localhost:7777/search/query/search.jsp?skin=sayt. Soll die sayt-Suche standardmässig genutzt werden, kann das skin bundle auch als default eingerichtet werden. Das Ergebnis sieht dann wie folgt aus:


Diese Lösung kann auf einfachem Wege geändert oder erweitert werden. So können z.B. anstelle der populären Suchen auch Indexeinträge angezeigt werden. Hier bewährt sich die offene Architektur von OSES, durch geschicktes Formulieren der SQL-Abfrage stehen hier viele Möglichkeiten offen.

Montag, 17. Mai 2010

Document Service: Autor aus dem Text anstelle der Metadaten lesen

In einem Projekt kam die Frage auf, ob man den Autor des Dokuments direkt aus dem Text anstelle der Metadaten lesen kann. Dies kann über einen entsprechenden Document Service realisiert werden, der in Java umgesetzt wird.
Als Grundlage lässt sich ein Beispiel verwenden, welches auf OTN zu finden ist unter
Dieses implementiert einen Document Service, der Fussballvereine als Attribute aus Dokumenten filtert. Um dieses Beispiel zu benutzen, sollten die Dateien von OTN entpackt werden und die Java-Klassen sowie das Skript zum Übersetzen gegen die unten angegebenen ausgetauscht werden. Die Anleitung im o.g. Beispiel ist für beide Document Services gültig, lediglich die Parameter müssen angepasst werden.
Der neue Document Service soll das Dokument nach dem Vorkommen des Textes 'Autor: ' durchsuchen und den Rest der Zeile dann als Attribut Autor abspeichern. Um den Service etwas allgemeiner zu formulieren, soll der Text nach dem gesucht wird über die Oberfläche konfigurierbar sein, auch für die Anzahl der zu durchsuchenden Zeichen soll ein Limit parametrierbar sein.
Ein Document Service besteht immer aus zwei Klassen. Der eigentlichen Implementierung sowie einer Ableitung von DocumentServiceManager, über die die entsprechende Konfiguration vorgenommen wird. Dort werden die Parameter konfiguriert:

    private void populatePluginParamInfo()
    {
    PARAMETER_LIST = new ParameterInfo[]
        {
        new ParameterInfo("Attribute Name", "Name of the new attribute", "Autor", false),
        new ParameterInfo("Pattern", "Pattern to search for", "Autor: ", false),
        new ParameterInfo("Number of chars", "Number of characters to search", "1000", false)
        };
    } 

In der OSES Admin Oberfläche sieht das dann wie folgt aus:

 Die eigentliche Arbeit macht dann eine Ableitung der DocumentService Klasse, in diesem Fall  AttributePatternService.

    try
        {
        // The document is passed as a DocumentContainer from
        // which we get a Reader.
        htmlReader = document.getDocumentReader();     
        if (htmlReader == null)
            return DocumentService.STATUS_NO_CHANGE;

        docBuffer = new StringBuffer("");

        // Build a StringBuffer with the document content.              
                int cnt = 0;           
        while( ((charValue = htmlReader.read()) != -1) &&
                       (cnt < numChars) )
            {
            docBuffer.append((char)charValue);
                        ++cnt;
            }
           
                // Find the pattern in the docBuffer
                int indexFound;
                if ( (indexFound = docBuffer.indexOf(patternString)) != -1) {
                   
                    // cut of from the next tag
                    int foundTextStart = indexFound + patternLength;
                    int foundTextEnd = docBuffer.indexOf("<", foundTextStart);
                   
                    String patternFound = docBuffer.substring(foundTextStart, foundTextEnd);
                   
                    // eliminate tabs
                    indexFound = patternFound.indexOf(" ");
                    if(indexFound != -1)
                        patternFound = patternFound.substring(0,indexFound);
                   
                    // eliminate trailing whitespaces                      
                    patternFound = patternFound.trim();
                   
                    docMeta.addAttribute(attrName, patternFound);
                } else {
                    docMeta.addAttribute(attrName, notFoundText );
                }
                            
        return DocumentService.STATUS_ATTRIBUTE_CHANGE;
        }


Zunächst werden so viele Zeichen wie vorgegeben wurden in den docBuffer geladen. Danach wird das übergebene Pattern in dem Buffer gesucht, der Text ab den nächsten Tag abgeschnitten und noch ein paar Whitespaces entfernt. Der Rest wird dann in dem angegebenen Attribut abgelegt.
Damit das neue Attribut in der Ergebnisliste angezeigt wird, muss das XSLT in den Globalen Einstellungen unter Out-of-the Box Abfrageanwendung|Suchergebnisliste konfigurieren entsprechend angepasst werden. Hierzu habe ich einfach die folgenden Zeilen hinter dem Autor eingefügt, so dass beide Autoren angezeigt werden:


Die Suche stellt sich dann wie folgt dar. Es ist zwei mal das gleiche Dokument. Bei einem von beiden ist ein Autor eingetragen der auch angezeigt wird, bei dem zweiten nicht:


Die Quellen hierzu gibt es hier: AttributePattern_Doc_Service_Plugin.zip

Donnerstag, 4. März 2010

Secure Enterprise Search 11g ist verfügbar

Es hat ein bisschen gedauert, aber seit heute ist die neue Version 11 auf OTN verfügbar. Die lange Entwicklungszeit hat uns dafür aber auch viele neue oder verbesserte Funktionalitäten gebracht. Einige Änderungen im Überblick sind:
  • Stores 10x more content per SES server for the same license cost. Search performance on large scale
  • content radically improved via new search engine index layout, internal parallelism & index partitioning
  • Near real-time search support. Significantly reduces impact of frequent index updates on query performance. New feature automates index fragmentation management for the benefit of high churn applications like email or news content
  • SES is now internally using WebLogic App. Server 10.3 and its JRockit VM & JDK 
  • Improved Manageability via new Administration APIs and Command line Interface
  • New Outside In document format filters, including support for MS Office 2007 formats and Star Office
  • Windows Native Authentication (WNA) via Kerberos
  • Connectivity to E-Business Suite and Siebel. Many ERP modules offered out of the box. Search Modeler tools allow customers to create searchable objects for modules in EBS 11 or 12 which are not yet supported
  • Connector Updates: Microsoft Sharepoint 2007 (new), Documentum 6.5, Siebel 7.8 activity/attachment support. Higher incremental crawl performance for NTFS- and Oracle ContentDB sources, Image document services (ability to extract meta data from image file types)
  • A new User Authorization Cache reduces the impact of ACL updates on crawled sources
  • Oracle Access Manager (OAM) SSO support
 Details gibt es im Datasheet oder Technical White Paper.

Freitag, 23. Oktober 2009

QuickTip: SeSecurityPriviledge nicht mehr notwendig

Beim Crawling von NTFS-Shares gab es teilweise das Problem, daß der Benutzer unter dem der OSES-Crawler läuft, Windows-seitig unbedingt das

SeSecurityPriviledge

haben musste. Problematisch ist das, weil das z.T. mehr Berechtigung ist, als dem Crawler bei einigen Anwender zugestanden wird. Das wurde von Oracle aber als Bug "Bug 6843343: NTFS CONNECTOR REQUIRES
SESECURITYPRIVILEGE" gefixt. Seit dem Release 10.1.8.3 wird dieses Recht vom Crawler nicht mehr benötigt.

Mittwoch, 30. September 2009

FAQ: Benutzername für den NTFS Webservice

Für das Crawlen von NTFS-Sourcen von anderen Plattformen als Windows wird ja der NTFS Webservice benötigt. Über diesen kommuniziert OSES über den Microsoft IIS mit der Windows Maschine, da von Unix/Linux-Plattformen kein Zugriff auf die NTFS ACL's besteht. Da viele OSES Administratoren, die unter UNIX/Linux arbeiten, häufig keine Erfahrungen mit dem MS IIS haben, kommen immer wieder Fragen zur Konfiguration auf. Es reicht eigentlich aus, das 'Kochrezept' im OSES Administrators Guide Schritt für Schritt zu befolgen. Für die zu vergebende Benutzername/Password-Kombination schreibt die Dokumentation:

"User name that authenticates Oracle SES to the NTFS Web
service. You also enter this user name when creating the NTFS
source. Oracle SES cannot access the Web service without the
service username and password."

Dabei ist wichtig: diese Kombination aus Benutzername/Password kann frei gewählt werden und ist nur zwischen dem NTFS Webservice und OSES relevant. Wichtig ist also nur, dass auf beiden Seiten das gleiche eingegeben wird.



Hier werden in der IIS Service-Konfiguration die Attribute ServiceUserName und ServicePassword gesetzt.



Und die gleiche Kombination wird hier auf der OSES Seite eingetragen.