verbesserte Suche

Thema wurde von sirtet, 25. September 2013 erstellt.

  1. Hanjü

    Hanjü Erfahrener Benutzer

    Registriert seit:
    15. August 2011
    Beiträge:
    174
    Danke erhalten:
    5
    Danke vergeben:
    42
    Na dann :p, beide Lösungen sind <einfach nur Gut>
     
  2. gunterpirntke

    gunterpirntke Erfahrener Benutzer

    Registriert seit:
    17. Januar 2013
    Beiträge:
    77
    Danke erhalten:
    2
    Danke vergeben:
    30
    Guten Morgen,

    gibt es die Möglichkeit die Mindestlänge der Suchanfragen fest zu schreiben ?
    @humpfle
    Da Du schribst, daß sich Deine Verbesserungen mit sirtet kombinieren lassen, werde ich mich diese Woche mal ran setzen und umsetzen.
    Dazu melde ich mich dann wieder.

    VG
    Ralf
     
  3. Steffen (indiv-style.de)

    Steffen (indiv-style.de) G-WARD 2013/14/15/16

    Registriert seit:
    30. Juni 2011
    Beiträge:
    5.139
    Danke erhalten:
    1.461
    Danke vergeben:
    449
    Beruf:
    Systemadmin, Webentwickler bei Reifen24.de
    Ort:
    PhpStorm
  4. Hanjü

    Hanjü Erfahrener Benutzer

    Registriert seit:
    15. August 2011
    Beiträge:
    174
    Danke erhalten:
    5
    Danke vergeben:
    42
    Guten Morgen Steffen,
    bin begeistert von deinem neuen Modul, eine Frage habe ich noch:

    Verträgt es sich auch mit dem Modul/Tool von sirtet.

    Dieses habe ich nämlich bei uns schon installiert.
     
  5. Steffen (indiv-style.de)

    Steffen (indiv-style.de) G-WARD 2013/14/15/16

    Registriert seit:
    30. Juni 2011
    Beiträge:
    5.139
    Danke erhalten:
    1.461
    Danke vergeben:
    449
    Beruf:
    Systemadmin, Webentwickler bei Reifen24.de
    Ort:
    PhpStorm
    Naja, eigentlich seh ich da keine Probleme. Müsste man mal testen..... ;)
     
  6. Hanjü

    Hanjü Erfahrener Benutzer

    Registriert seit:
    15. August 2011
    Beiträge:
    174
    Danke erhalten:
    5
    Danke vergeben:
    42
    Na dann los , du hast doch meine Daten :D.

    Steffen du weißt doch, du bist für uns der Größte, selbst bei Problemen bei denen uns Gambio nicht mehr helfen konnte, hast du weiter gewußt.
     
  7. gunterpirntke

    gunterpirntke Erfahrener Benutzer

    Registriert seit:
    17. Januar 2013
    Beiträge:
    77
    Danke erhalten:
    2
    Danke vergeben:
    30
    Es gibt keine Probleme mit dem Modul von Sirtet und Steffen.
    Beide Sachen arbeiten auf www.das-ebook24.de friedlich zusammen. ;-)

    Gruß
    Ralf
     
  8. pema

    pema Erfahrener Benutzer

    Registriert seit:
    17. Juni 2012
    Beiträge:
    408
    Danke erhalten:
    69
    Danke vergeben:
    106
    Danke für das coole Modul, die Idee ist spitze!
    Es funktioniert so wie es soll, jedoch kommt in unserem Fall das Problem zum Tragen, dass wir den Shop zweisprachig betreiben. Einerseits werden Ergebnisse doppelt (in jeder Sprache) angezeigt (siehe Anhang), andererseits werden im englischen Shop deutsche Ergebnisse präsentiert. Heißt es steht bspw. "Kategorien:", "Hersteller:" usw. in den Vorschlägen der englischen Seiten.
    Gibt es da eine Möglichkeit das anzupassen?
     

    Anhänge:

  9. sirtet

    sirtet Erfahrener Benutzer

    Registriert seit:
    4. Juli 2012
    Beiträge:
    995
    Danke erhalten:
    80
    Danke vergeben:
    76
    Die Titel sind in der html datei, einfach zu finden. wie man das nach Sprachen unterteilt sollte man auch leicht ergoogeln / an anderen Stellen abschauen können.

    Doppelte Ergebnisse gibts nur in den kategorien (und hersteller?) nehme ich an?
    Das sieht man wohl in der php datei, dass da keine Sprachabfrage gemacht wird, ich hab nur eine Sprache. Sollte auch recht leicht machbar sein.

    Ich hab aber momentan keine Zeit dazu. Und auch kein Shop mit sprachen, um's beim programmieren zu testen.
     
  10. sirtet

    sirtet Erfahrener Benutzer

    Registriert seit:
    4. Juli 2012
    Beiträge:
    995
    Danke erhalten:
    80
    Danke vergeben:
    76
    Um meine Erweiterte AJAX-Suche unter 2.1 zum laufen zu bringen, muss man neu nicht mehr die /gm/ajax/live_search.php bearbeiten, sondern die system/classes/search/LiveSearchAjaxHandler.inc.php

    Sie enthält die beinahe identischen SQL-Abfragen, sie sind einfach neu verpackt in einer Klasse.
    Momentan sieht die Datei bei mir so aus (Stand 2.1.4.0):
    PHP:
    <?php
    /* --------------------------------------------------------------
       LiveSearchAjaxHandler.inc.php 2012-01-31 mb
       Gambio GmbH
       http://www.gambio.de
       Copyright (c) 2012 Gambio GmbH
       Released under the GNU General Public License (Version 2)
       [http://www.gnu.org/licenses/gpl-2.0.html]
       --------------------------------------------------------------
    */

    class LiveSearchAjaxHandler extends AjaxHandler
    {
        function 
    get_permission_status($p_customers_id=NULL)
        {
            return 
    true;
        }

        function 
    proceed()
        {
            if(
    defined('_GM_VALID_CALL') === false) die('x0');

            
    $f_needle                 $this->v_data_array['GET']['needle'];
            
    $t_needle                 stripslashes($f_needle);
            
    $c_needle                 mysql_real_escape_string($t_needle);


            
    $module_content = array();

            
    $t_group_check '';
            if (
    GROUP_CHECK == 'true') {
                
    $t_group_check " and p.group_permission_".(int)$_SESSION['customers_status']['customers_status_id']."=1 ";
            }

            
    // BOF toro: search manufacturers

            
    $result xtc_db_query('
                SELECT DISTINCT
                    m.manufacturers_id AS manufacturers_id,
                    m.manufacturers_name AS manufacturers_name,
                    m.manufacturers_image AS manufacturers_image
                FROM
                    manufacturers m
                WHERE
                    m.manufacturers_name  LIKE "%'
    .$c_needle.'%" 
                    ' 
    $t_group_check '
                ORDER BY
                    m.manufacturers_name
                LIMIT 0,6
            '
    );

            while((
    $row xtc_db_fetch_array($result) ))
            {
                
    $row_data = array (                            'MFG_ID'     => $row['manufacturers_id'],
                                                            
    'MFG_URL'    => DIR_WS_CATALOG 'index.php?manufacturers_id=' $row['manufacturers_id'],
                                                            
    'MFG_NAME'    => $row['manufacturers_name']    );
                if (
    $row['manufacturers_image']) {
                    
    $row_data['MFG_IMAGE'] =  DIR_WS_IMAGES $row['manufacturers_image'] ;
                }
                
                
    $module_content_mfg[] = $row_data;
            }

            
    // EOF toro: search manufacturers
            // BOF toro: search categories

            
    $result xtc_db_query('
                SELECT DISTINCT
                    c.categories_id AS categories_id,
                    cd.categories_name AS categories_name,
                    c.categories_image AS categories_image
                FROM
                    categories c,
                    categories_description cd
                WHERE
                    c.categories_status = 1 AND
                    c.categories_id = cd.categories_id AND
                    (cd.categories_name LIKE "'
    .$c_needle.'%" OR
                     cd.categories_description LIKE "%'
    .$c_needle.'%" OR
                     cd.categories_heading_title LIKE "%'
    .$c_needle.'%" OR
                     cd.categories_meta_title LIKE "%'
    .$c_needle.'%" OR
                     cd.categories_meta_description LIKE "%'
    .$c_needle.'%" OR
                     cd.categories_meta_keywords LIKE "%'
    .$c_needle.'%" 
                     )
                    ' 
    $t_group_check '
                ORDER BY
                    cd.categories_name
                LIMIT 0,4
            '
    );

            while((
    $row xtc_db_fetch_array($result) ))
            {
                
    $row_data = array (                            'CAT_ID'     => $row['categories_id'],
                                                            
    'CAT_URL'    => xtc_href_link(FILENAME_DEFAULTxtc_category_link($row['categories_id'], $row['categories_name'])),
                                                            
    'CAT_NAME' => $row['categories_name']    );
                if (
    $row['categories_image']) {
                    
    $row_data['CAT_IMAGE'] =  DIR_WS_IMAGES 'categories/' $row['categories_image'] ;
                }
                
                
    $module_content_cat[] = $row_data;
            }

            
    // EOF toro: search categories


            
    $t_attr_from '';
            
    $t_attr_where '';
            if(
    SEARCH_IN_ATTR == 'true')
            {
                
    $t_attr_from .= " LEFT OUTER JOIN " TABLE_PRODUCTS_ATTRIBUTES " AS pa ON (p.products_id = pa.products_id) LEFT OUTER JOIN " TABLE_PRODUCTS_OPTIONS_VALUES " AS pov ON (pa.options_values_id = pov.products_options_values_id) LEFT OUTER JOIN products_properties_combis AS ppc ON (p.products_id = ppc.products_id)  LEFT OUTER JOIN products_properties_index AS ppi ON (p.products_id = ppi.products_id) ";
                
    $t_attr_where .= "OR pa.attributes_model LIKE ('%".$c_needle."%') ";
                
    $t_attr_where .= "OR ppc.combi_model LIKE ('%".$c_needle."%') ";
                
    $t_attr_where .= "OR (ppi.properties_name LIKE ('%".$c_needle."%') ";
                
    $t_attr_where .= "AND ppi.language_id = '".(int) $_SESSION['languages_id']."')";
                
    $t_attr_where .= "OR (ppi.values_name LIKE ('%".$c_needle."%') ";
                
    $t_attr_where .= "AND ppi.language_id = '".(int) $_SESSION['languages_id']."')";
                
    $t_attr_where .= "OR (pov.products_options_values_name LIKE ('%" $c_needle "%') AND pov.language_id = '". (int)$_SESSION['languages_id'] . "')";
            }

            
    $t_desc_where '';
            if (
    SEARCH_IN_DESC == 'true')
            {
               
    $t_desc_where .= "OR pd.products_description LIKE ('%"$c_needle ."%') ";
               
    $t_desc_where .= "OR pd.products_short_description LIKE ('%"$c_needle ."%') ";
            }

            
    // search in products name and model(=SKU) only, these will rank higher than matches in descriptions
            
    $result xtc_db_query('
                SELECT DISTINCT
                    pd.products_id AS products_id,
                    pd.products_name AS products_name,
                    p.products_image AS products_image
                FROM
                    products p
                    ' 
    $t_attr_from ',
                    products_description pd
                WHERE
                    p.products_status = 1 AND
                    p.products_id = pd.products_id AND
                    (pd.products_name LIKE "%' 
    $c_needle '%" 
                        OR p.products_model LIKE ("%'
    .$c_needle.'%") 
                        OR p.products_ean LIKE ("%'
    .$c_needle.'%") '
                        
    $t_desc_where ' '
                        
    $t_attr_where ')
                    AND
                    pd.language_id = "'    
    . (int)$_SESSION['languages_id'] . '"
                    ' 
    $t_group_check '
                ORDER BY
                    pd.products_name
                LIMIT 0,10
            '
    );

            while((
    $row xtc_db_fetch_array($result) ))
            {
                
    $row_data = array (
                                                            
    'PRODUCTS_ID'     => $row['products_id'],
                                                            
    'PRODUCTS_URL'    => xtc_href_link(FILENAME_PRODUCT_INFOxtc_product_link($row['products_id'], $row['products_name']) ),
                                                            
    'PRODUCTS_NAME' => $row['products_name']
                                                        );
                if (
    $row['products_image']) {
                    
    $row_data['PRODUCTS_IMAGE'] =  DIR_WS_IMAGES 'product_images/gallery_images/' $row['products_image'] ;
                }

                
    $module_content[] = $row_data;
            }

            
    // search in products descriptions and attributes only (plus EAN)
            
    $result xtc_db_query('
                SELECT DISTINCT
                    pd.products_id AS products_id,
                    pd.products_name AS products_name,
                    p.products_image AS products_image
                FROM
                    products p
                    ' 
    $t_attr_from ',
                    products_description pd
                WHERE
                    p.products_status = 1 AND
                    p.products_id = pd.products_id AND
                    (p.products_ean LIKE ("'
    .$c_needle.'%") '
                        
    $t_desc_where ' '
                        
    $t_attr_where .')
                    AND
                    pd.language_id = "'    
    . (int)$_SESSION['languages_id'] . '"
                    ' 
    $t_group_check '
                ORDER BY
                    pd.products_name
                LIMIT 0,6
            '
    );

            while((
    $row xtc_db_fetch_array($result) ))
            {
                
    $row_data = array (                            'PRODUCTS_ID'     => $row['products_id'],
                                                            
    'PRODUCTS_URL'    => xtc_href_link(FILENAME_PRODUCT_INFOxtc_product_link($row['products_id'], $row['products_name']) ),
                                                            
    'PRODUCTS_NAME' => $row['products_name']    );
                if (
    $row['products_image']) {
                    
    $row_data['PRODUCTS_IMAGE'] =  DIR_WS_IMAGES 'product_images/gallery_images/' $row['products_image'] ;
                }
                
                
    $module_content[] = $row_data;
            }

            
    // remove duplicates from the different searches
            
    $module_content array_unique($module_contentSORT_REGULAR);

            if(
    sizeof($module_content) > OR sizeof($module_content_mfg) > OR sizeof($module_content_cat) > 0) {
                
    $smarty = new Smarty;
                if(
    sizeof($module_content) > ) { $smarty->assign('module_content'$module_content); }
                if(
    sizeof($module_content_mfg) > ) { $smarty->assign('module_content_mfg'$module_content_mfg); }
                if(
    sizeof($module_content_cat) > ) { $smarty->assign('module_content_cat'$module_content_cat); }

                
    $smarty->assign('language'$_SESSION['language']);
                
    $smarty->caching 0;

                
    $this->v_output_buffer $smarty->fetch(CURRENT_TEMPLATE.'/module/gm_live_search.html');
            }

            return 
    true;
        }
    }
    ?>
     
  11. oktay-orbeyi

    oktay-orbeyi Aktives Mitglied

    Registriert seit:
    2. März 2015
    Beiträge:
    42
    Danke erhalten:
    4
    Danke vergeben:
    5
    Hi zusammen,

    klasse Idee und sieht toll aus, aber irgendwie will es nicht unter 2.2 laufen. Hast du es schon zum Laufen gebracht ? Würde mich freuen von dir zu lesen.

    Sonnige Grüße
    Oktay
     
  12. Dennis (MotivMonster.de)

    Dennis (MotivMonster.de) G-WARD 2013/14/15/16

    Registriert seit:
    22. September 2011
    Beiträge:
    30.477
    Danke erhalten:
    5.932
    Danke vergeben:
    1.061
    Beruf:
    Mann für alles :)
    Ort:
    Weilburg
    Mal über findologic freemium nachgedacht? Besser geht aktuell kaum. Einfach im forum suchen.
     
  13. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    19. Juni 2012
    Beiträge:
    4.604
    Danke erhalten:
    1.011
    Danke vergeben:
    882
    Hallo Humpfle,


    sehr nützliches Tool offenbar. Wie kommmt man da denn dran?


    Danke und VG
     
  14. Steffen (indiv-style.de)

    Steffen (indiv-style.de) G-WARD 2013/14/15/16

    Registriert seit:
    30. Juni 2011
    Beiträge:
    5.139
    Danke erhalten:
    1.461
    Danke vergeben:
    449
    Beruf:
    Systemadmin, Webentwickler bei Reifen24.de
    Ort:
    PhpStorm
    Die Schnellsuche ansich ist eigentlich in ihrer Arbeitsweise strafbar!!! Wenn man in die Schellsuche nicht genau das eingibt wie es im Namen oder Description oder Keywords steht, zeigt die nix mehr an. Das ist nicht unbedingt das was man eine vernünftige Suche nennt.

    Aber, nicht meckern sondern machen! Ich hab mir das ganze mal etwas intensiver angesehen und auf eine Entwicklungsumgebung bei uns versucht umzusetzen. Ich hab den Ablauf mir folgend vorgestellt!

    Gibt man Suchbegriffe in die Schnellsuche ein, soll es irrelevant sein in welcher Reihenfolge die Suchwörter kommen!
    Beispiel:

    Kunde benötigt das: Michelin ALPIN 5 205/55R16 91H TL
    Nun müsste er die fasst genauso eingeben das die Schnellsuche auch Ergebnisse liefert.
    Gibt er es so ein: 205 michelin 55 91 alpin -> dann ist Schicht im Schacht!!!

    Und genau das macht meine Suche jetzt schon nicht mehr! Das funktioniert auch schon fantastisch, wie die erste Abbildung zeigt:

    Suche1.jpg

    Sollte es sich dann herrausstellen das nichts vorhanden ist was den eingaben entspricht, greift eine Suchkombination aus levenshtein(), similar_text() und metaphone(). Diese erzeugt aber keine Artikelvorschläge sondern Suchbegriffvorschläge mit den % als Angabe wie der eingegebene Wert den vorhandenen gleicht und die Anzahl der dafür gefundenen Artikel. Das ist für uns bei knapp 112000 Artikeln noch etwas zu langsam und wird noch stark optimiert werden müssen, da dies immer knapp 3-4 sec dauert. Aber es funktioniert schon mal, siehe 2. Bild:

    Suche2.jpg

    Wird sicherlich noch bissl dauern eh das live gehen kann aber es ist ein unabhängiges Tool ohne Fremdanbieter.
     
  15. barbara

    barbara G-WARD 2014-2020

    Registriert seit:
    14. August 2011
    Beiträge:
    33.744
    Danke erhalten:
    10.499
    Danke vergeben:
    1.500
    Wochenende?

    ob ich jetzt besser gehen sollte ? :eek:
     
  16. Steffen (indiv-style.de)

    Steffen (indiv-style.de) G-WARD 2013/14/15/16

    Registriert seit:
    30. Juni 2011
    Beiträge:
    5.139
    Danke erhalten:
    1.461
    Danke vergeben:
    449
    Beruf:
    Systemadmin, Webentwickler bei Reifen24.de
    Ort:
    PhpStorm
    Dingenling Dingeling.... GRRRRRRRRRRRRRRRRRRRRRRRRR :)
     
  17. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    19. Juni 2012
    Beiträge:
    4.604
    Danke erhalten:
    1.011
    Danke vergeben:
    882
    Wie geil ist das denn?! Ich wusste nichtmal dass es solche exotischen PHP Funktionen wie metaphone() gibt! Steffen, das hört sich echt super an was du da planst. Und das wird dann als Kaufmodul angeboten?
     
  18. Steffen (indiv-style.de)

    Steffen (indiv-style.de) G-WARD 2013/14/15/16

    Registriert seit:
    30. Juni 2011
    Beiträge:
    5.139
    Danke erhalten:
    1.461
    Danke vergeben:
    449
    Beruf:
    Systemadmin, Webentwickler bei Reifen24.de
    Ort:
    PhpStorm
    Mal schauen! Kaufmodul is scheisse, da ich den Support nicht abdecken kann! Wird wohl frei verschenkt werden... :)

    Problem im Moment ist, das wir bei reifen24 alle relevanten Daten in der DB einzeln haben und diese automatisch als Suchbegriffe in eine extra Spalte schreiben. Das dauert bei allen Artikeln im Moment ca. 30sec... Also relativ schnell für 112000 Artikel. Es geht aber auch schon so, das das php-Skript den Namen und die Keywords durchläuft, auseinander nimmt und sich fertige Kombinationen selbst erstellt. Das möchte ich nun noch so erweitern das da schon eine gewisse Fehlertolleranz ausgearbeitet wir. Ist etwas schwieriger als gedacht, weil ich ja nicht weis was die Leute alles für Mist da reinschreiben. Also wird es dann noch eine 2. Funktion geben, wo anhand der Internen Suche, die Angaben durchlaufen werden und dann als fertige Suchergebnisse vorgehalten werden.

    Das ist schon relativ schwierig aber machbar. Fackt ist ein, es wird so ähnlich funktionieren wie die Suchen bei Amazon und co aber ganz so sauber schaffen wir das nicht. Wobei die meisten sicherlich auch nicht millionen von Artikeln haben werden.
     
  19. Anonymous

    Anonymous G-WARD 2015/2016

    Registriert seit:
    20. Februar 2012
    Beiträge:
    8.583
    Danke erhalten:
    1.484
    Danke vergeben:
    962
    stelle mich gerne als Tester zur Verfügung :)
     
  20. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    19. Juni 2012
    Beiträge:
    4.604
    Danke erhalten:
    1.011
    Danke vergeben:
    882
    Ich mich auch! Und kannst du auch von sirtet mit einbauen, dass Treffer mit exakten Treffern im Artikel Namen in den Ergebnissen höher platziert werden als exakte Treffer in Beschreibung oder Attributen? (Link nur für registrierte Nutzer sichtbar.)