Suche nach Artikelbezeichnung & Artikelnummer

  • Hi Frank,


    brauchst Du eine explizite Suche über die beiden Felder? Die aktuelle EE Suche sucht bereits über die Felder. Wenn es zu ungenau ist müsstest Du nur das Metaphone in der Abfrage rausnehmen.

  • Hallo Hasan,


    also irgendwie sucht er bei mir gar nichts raus.
    Ich habe Fuzzy Search deaktiviert und Metaphone steht auf 0.


    Sobald ich was suche zeigt er mir gar nichts an...


    Nur mit Fuzzy Search zeigt er mir dan Annäherungswerte an, aber das wollte ich nicht. Daher ausgeschaltet...


    Also im Originalshop hier auf der Seite scheint er zumindest nach Artikelbezeichnung zu suchen aber Artikelnummer auch nicht...


    Viele Grüße


    Frank

  • Wenn die Artikel importiert wurden muss das Index erstellt werden

    Code
    1. Adminbereich => Module => Module => H.H.G. multistore search
  • Hallo Hasan,


    ok die Indexierung ist nun durchgelaufen.
    Wenn ich nun nach einem Text suche kommen auch Ergebnisse, also bereits ein Stück weiter.
    Dafür erstmal Danke! :)


    Wenn ich jetzt eine Artikelnummer mit Punkten eingebe erscheinen aber 4 Seiten mit Ergebnissen obwohl die Artikelnummer eindeutig ist.


    Definiert die Suche die Punkte in einer Artikelnummer (z.B.: 123.456.789) als und?


    Viele Grüße


    Frank

  • Hallo Hasan,


    ah ok bin wieder etwas weiter.
    Also muss man im Admin unter den Suchoptionen auch die Trennzeichen angeben.
    Habe ich dann gemacht als Standard nur das Leerzeichen also: [ ]


    Wenn ich jedoch jetzt die Art.Nr. eingebn ist es weiterhin so das viel mehr Ergebnisse kommen als gewünscht.
    Eigentlich sollte nur ein Artikel kommen da die Art.Nr. eindeutig ist.
    Oder muss ich nach dem Eisntellen der Trennzeichen nochmals die Indexierung der Suche durchlaufen lassen?


    So das habe ich auch gemacht, trotzdem jede Menge Treffer... und das bei eindeutiger Art.Nr.


    Viele Grüße


    Frank

    Dieser Beitrag wurde bereits 1 Mal editiert, zuletzt von franky_n ()

  • Hallo Hasan,


    ich denke das Problem liegt wahrscheinlich hier:
    /admin/core/classes/class.hhg_search.php in Z.185ff und Z.196:



    Code
    1. $string = preg_replace_callback(
    2. '/&#x([a-f0-9]+);/mi',
    3. function ($matches) {
    4. return chr(hexdec('0x' . $matches[1]));
    5. },
    6. $string
    7. );


    Code
    1. $string = preg_replace('/[^0-9a-zA-ZÀ-Üà-üß_]/', ' ', $string);


    Sehe ich das richtig das dort die Punkte ersetzt werden durch ein Leerzeichen und ich dadurch bei einer Artikelnummer mit 4 voneinander getrennten Zahlen 4 Suchwörter bekomme?
    Wie kann ich es am Besten ändern?


    EDIT:


    Sollte es so geändert werden?

    Code
    1. $string = preg_replace('/[^0-9a-zA-ZÀ-Üà-üß_.]/', ' ', $string);


    Viele Grüße


    Frank

  • Wenn die Ergebnisse zu viel sind, also ungenau werden sollte das Metaphone raus:

    PHP: core/modules/search.php
    1. if (!empty($metaphone) && !preg_match('/[a-zA-Z][0-9]/', $search_keywords[$i])) {

    ändern in:

    PHP: core/modules/search.php
    1. if (1!=1 && !empty($metaphone) && !preg_match('/[a-zA-Z][0-9]/', $search_keywords[$i])) {
  • Hallo Hasan,


    nope geht nicht.
    Sobald ich das raus nehme bleiben die Ergebnisse weiterhin ungenau.


    Nochmal, was passiert:
    Ich gebe eine Artikelnummer ein die z.B. lautet 123.456.789
    Dann scheint die Indexierung aber daraus 3 Wörter zu machen nämlich 123 dann 456 und dann 789.
    Da es mehrere Artikel gibt die evtl. ein 123 drin haben oder ein 456 oder ein 789, werden mehrere Artikel angezeigt und nicht nur der eine mit der Artikelnummer 123.456.789.


    Habe in der DB schon nachgeschaut und er scheint es als einzelne Wörter zu verpacken.
    Darum mein Ansatz in der Indexierung.
    Macht es vielleicht Sinn die Art.Nr. aus der Indexierung soweit raus zu halten das dort bei Punkten nicht einzelne Leerzeichen davon gemacht werden und somit mehrere Wörter?


    Viele Grüße


    Frank

  • Ja ok dann solltest Du deine vorgeschlagene Änderung mit dem Punkt hinzufügen und ausprobieren. Musst halt den Index dann neu aufbauen.

  • Hi Hasan,


    jo das hatte ich aber auch schon ausprobiert, aber ich befürchte ich mache den regex falsch, denn es passiert da ebenfalls nichts...


    Es gibt einen preg_replace_callback und einen preg_replace in der Klasse...
    Kannst Du mir sagen wie das korrekt wäre den Punkt nicht bei der Indexierung mit zu indexieren?


    Viele Grüße


    Frank

  • PHP: admin/core/classes/class.hhg_search.php
    1. $string = utf8_encode($string);
    2. $string = preg_replace('/[^0-9a-zA-ZÀ-Üà-üß_]/', ' ', $string);
    3. $wordArray = explode(' ', $string);
  • Hallo Hasan,


    ok das was Du gepostet hast ist die Originalzeile.


    Ich habe die nun so abgeändert:

    Code
    1. $string = preg_replace('/[^0-9a-zA-ZÀ-Üà-üß_\.]/', ' ', $string);

    und in der Tabelle wordlist sind nun auch die Artikelnummern komplett vorhanden.
    Der Punkt musste noch escaped werden da er sonst ein beliebiges Zeichen wäre...


    Wenn ich nun suche kommen aber immer noch mehrere Artikel, auch wenn ich z.B. wie oben das Metaphone raus mache.


    Wird denn bei der Indexierung dann auch die Tabelle wordmatch und wordlist komplett gelöscht?
    Warum habe ich immer noch so viele Ergebnisse?


    EDIT:
    Ich habe die wordmatch und wordlist Tabelle mal komplett gelöscht und die Indexierung nochmal drüber laufen lassen. Ich hoffe ich habe mir nichts zerstört.
    Wenn ich nun suche habe ich leider immer noch jede Menge Ergebnisse obwohl die Artikelnummer eindeutig ist...


    Viele Grüße


    Frank

    Dieser Beitrag wurde bereits 2 Mal editiert, zuletzt von franky_n ()

  • Hallo Hasan,


    mir geht das Problem nicht aus dem Kopf.
    Ich befürchte das die Klasse ausgebaut werden muss und das ein grösserer Aufwand ist.


    Also Ansatz wäre die Klasse class.hhg_serch.php in Z.161 aufzubohren:

    um in das Array noch eine Information rein zu packen ob es nun ein products_name oder products_model ist.
    Danach müsste die function getWordArray so aufgebohrt werden das product_model anders gefiltert wird als z.B. products_name...


    Ist meine Überlegung korrekt oder ist das totaler Quatsch was ich da fasel? ;)


    Viele Grüße


    Frank

  • Das was ich gepostet habe ist die Stelle in der Du die Anpassung für die Indexierung durchführen musst, danach muss das Index neu erstellt werden. Im Frontend muss natürlich das Gegenstück angepasst werden

    PHP: core/modules/search.php
    1. $string = preg_replace('/[^0-9a-zA-ZÀ-Üà-üß_]/', ' ', $string);
  • Hallo Hasan,


    jo das weiß ich nur die Anpassung hat mich nicht weitergebracht so wie Du oben lesen kannst.
    Ich habe wie folgt geändert:


    Code
    1. $string = preg_replace('/[^0-9a-zA-ZÀ-Üà-üß_\.]/', ' ', $string);


    Den Punkt auch Escaped damit er korrekt in der REGEX erkannt wird.
    Dann neu indexiert.


    Der Shop sucht immer noch zu viele Artikel raus.


    Ich habe in der wordlist zwar jetzt auch zusammenhängende Artikelnummern drin, aber trotzdem schmeißt er mir viele Suchergebnisse raus.
    Auch wenn ich das mit dem Metaphone raus mache wie von Dir angegeben mit dem 1!=1 geht es nicht.


    Immer wieder das gleiche Problem es wird nicht 1 Artikel angezeigt sondern 6-7 Seiten....


    Ich befürchte es muss getrennt werden das Artikelnummern nicht verändert werden.
    Bei den anderen Feldern die Indexiert werden ist es ja sinnvoll den Punkt zu entfernen.


    Mich wundert nur das noch keiner hier im Forum dieses Problem hatte...


    Ich finde es nicht unüblich das eine Artikelnummer so:
    123.456.789
    oder so
    123-456-789
    oder vielleicht auch so
    123/456/789
    aussieht.
    Meiner Meinung sollte ein Shop auch danach suchen können. :)


    Viele Grüße


    Frank

  • Also wenn das Metaphone raus ist sucht das System nach den Wörtern die in der Wordlist gespeichert sind. Das Metaphone selbst führt lediglich zu "gleichklingenden" Ergebnissen um etwaige Tippfehler auszuschließen, d.h. wenn die Artikelnummern korrekt im Index sind und die Sucheingabe ebenfalls nicht mehr nach Punkt getrennt wird sollten die Treffer exakt sein, wenn auch das Metaphone ausgeklammert wurde.

  • Hallo Hasan,


    nochmals ausprobiert. Leider nein.
    Ich habe in der wordlist den Wert:
    10.0723.000.20
    nur einmal drin stehen.


    An den screenshots ist zu erkennen das ich in der wordlist die Artikelnummer korrekt drin stehen habe.
    Im Skript ist das metaphone so geändert wie gewünscht.


    Ich gebe in die Suche ein:
    10.0723.000.20


    und erhalte 41 Seiten mit jeweils 20 Artikeln als Ergebnis.


    Gruß


    Frank

  • Die Änderungen scheinen nicht aufeinander zu passen.


    Diese Stelle scheint nicht angepasst worden zu sein, weil auch die Sucheingabe darf ja ebenfalls nicht per Punkt getrennt werden

    PHP: core/modules/search.php
    1. $string = preg_replace('/[^0-9a-zA-ZÀ-Üà-üß_]/', ' ', $string);

    Du kannst die erstelle Abfrage mit


    PHP: core/modules/search.php
    1. $wordlist_query = $registry['db']->query($query_str, true);

    ändern in:

    PHP: core/modules/search.php
    1. debug($query_str,true);
    2. $wordlist_query = $registry['db']->query($query_str, true);

    überprüfen. Dort muss das Suchwort als Ganzes stehen.