wiki:simpleSearch

Version 5 (modified by dwinter, 17 years ago) (diff)

--

Wie funktioniert simple search?

  • In der SQL Vision-Visiondatenbank wird ein zusätzlicher View eingerichtet, der alle Felder zusammenfasst die in Simple Search durchsucht werden sollen.
    CREATE OR REPLACE VIEW simple_search AS 
    (( SELECT vision_main.id_image, vision_main.short_title AS simple_search
       FROM vision_main
    UNION 
     SELECT vision_main.id_image, vision_main.description AS simple_search
       FROM vision_main)
    UNION 
     SELECT vision_main.id_image, vision_main.artist_author AS simple_search
       FROM vision_main)
    UNION 
     SELECT vision_main.id_image, vision_main.object_title AS simple_search
       FROM vision_main;
    
    
  • Dieses Feld kann dann mit der Funktion
      def ZSQLMultiSearch(self,_table,_searchField,_value,_idField,_additionalStatement="",_select=None,_subselectAddition="",_storename=None):
            """
            Durchsucht in einer Tabelle "table" die Spalte "searchfield" nach dem allen Vorkommnissen 
            von Worten in value und gibt alle Werte mit gleichem id field zurück, d.h. es wird die "und" suche über mehrere Eintrsege in einer
            Tabelle mit gleichem idField werd realisiert, 
            z.B. für simplesearch ueber mehrere Felder
            @param _table: Tabelle, die durchsucht werden soll.
            @param _searchField: Feld, das durchsucht wird
            @param _value: String der gesucht werden soll, gesucht wird nach allen Worten des Strings, die durch " "-getrennt sind.
            @param _idField: Feld mit id für die identifikation gleicher Einträge
            @param _additionalStatement: (optional) Zusaetzliches SQL Statement, dass zwischen dem ersten "select from" und dem ersten "where" eingegefügt wird.
            @param _subselectAddition: (optiona) Zusaetliche SQL Statement die hinter das select statement der subselects eingefuegt werde.
            @param _select: (optional) Alternativer Wert für den ersten SELECT Aufruf.
            @param _storename: (optional) Name fuer die Zwischenspeicherung von Werten in der Session
            """
    

durchsucht werden.

Beispiel:

<form action="multiSearchDB" method="get">
<!--<input type="hidden" name="_sort" value="artist_author">-->
<input type="hidden" name="_table" value="simple_search_2">
<input type="hidden" name="_additionalStatement" value="v left outer join vision_images i on (v.id_image = i.id) left outer join vision_main j on (v.id_image = j.id_image) ">
<input type="hidden" name="_select" value="i.filename as filename, j.*">
<input type="hidden" name="_subselectAddition" value="v">
<input type="hidden" name="_searchField" value="simple_search">
<input type="hidden" name="_idField" value="v.id_image">

<table>
  <tr>
    <td class="fieldname">Simple Search (search in author, title, description, short title)</td>
    <td><input name="_value" size="50"></td>
  </tr>
</table>
<input type="submit">


</form>

Ergibt als Statement mit dem Suchstring "camera lucida hoffmann":

select i.filename as filename, j.* from  simple_search 
v left outer join vision_images i on (v.id_image = i.id) 
left outer join vision_main j on (v.id_image = j.id_image)  
where lower(simple_search) like '%camera%' and v.id_image in
(select v.id_image from  simple_search v where lower(simple_search) like '%lucida%' 
intersect 
select v.id_image from  simple_search v where lower(simple_search) like '%hoffmann%')