Jump to content

Problema modulo di ricerca rapida


mante80

Recommended Posts

Ciao a tutti. Ho un problema con il modulo di ricerca rapida all'interno del sito, se provo a cercare un qualsiasi articolo non mi viene restituito nessun risultato (ho prestashop 1.4.8.2 sotto hosting SQL Aruba)

 

Ho provato a fare un backup-restore in locale e inizialmente non funzionava lo stesso, quindi pensavo di aver replicato il problema ma in realtà rilanciando l'indicizzazione in locale tutto funziona mentre online niente da fare, restituisce sempre risultati nulli.

 

Come prove ho anche provato a disattivare la ricerca isantanea e ajax quindi rilanciare ancora l'indicizzazione ma niente. Nel BO trova tutti i 610 prodotti quindi penso che da quel lato funzioni. Ho il dubbio che si tratti di qualcosa di collegato alla lingua ma ho anche provato a cambiare la lingua del sito e aggiungere dei TAG sul BO in inglese ma senza risultato.

 

Avete qualche idea?

 

Il sito è www.larryoldparts.com

 

Grazie

Edited by mante80 (see edit history)
Link to comment
Share on other sites

Io ho prestashop 1.5.2 (dovrebbe funzionare lo stesso) ,dovresti indicizzare i prodotti così (forse): Vai sul menù preferenze di prestashop, clicca sulla voce ricerca, si aprira una pagina, vai sulla voce indicizza i prodotti e, ad indicizzazione eseguita, attiva la ricerca AJAX

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Joalis Italia E-Shop www.joalisitalialabeshop.com

Edited by joalis (see edit history)
Link to comment
Share on other sites

Grazie innanzitutto per la risposta.

 

Ho provato a fare come dici ma non funziona. Ho fatto veramente qualsiasi tipo di prova ma non ne sono venuto a capo. Visto che l'ambiente replicato in locale funziona probabilmente si tratta di un problema sull'Hosting Aruba. Dovrei riuscire a capire se il DB risulta correttamente indicizzato magari con qualche query diretta da SQL e poi vedere quale query viene lanciata dal bottone di ricerca per capire dov'è l'inghippo.

 

Non sono però molto pratico su questo aspetto, qualcuno mi sa dare qualche suggeriimento in merito?

Link to comment
Share on other sites

Ho trovato io una possibile soluzione:

 

Mi sono accorto che, mentre nella versione in locale del sito le tabelle ps_search_world e ps_search_index erano piene, in quella hosted rimanevano vuote. Ho anche provato a droppare la tabella remota e caricare quella locale ma niente da fare.

 

Secondo me si tratta di un problema della versione PHP dell'hosting Aruba che non supporta alcune funzioni presenti nel modulo di ricerca/indicizzazione (classes\search.php)

 

Visto che la ricerca nel BO funziona perché al posto delle tabelle search_word and search_index utilizza la query diretta su SQL ho sostituito nel codice di search.php in questo modo:

 

Tolto:

 

foreach ($words AS $key => $word)

if (!empty($word) AND strlen($word) >= (int)Configuration::get('PS_SEARCH_MINWORDLEN'))

{

$word = str_replace('%', '\\%', $word);

$word = str_replace('_', '\\_', $word);

 

$intersectArray[] = 'SELECT id_product

FROM '._DB_PREFIX_.'search_word sw

LEFT JOIN '._DB_PREFIX_.'search_index si ON sw.id_word = si.id_word

WHERE sw.id_lang = '.(int)$id_lang.'

AND sw.word LIKE

'.($word[0] == '-'

? ' \''.pSQL(Tools::substr($word, 1, PS_SEARCH_MAX_WORD_LENGTH)).'%\''

: '\''.pSQL(Tools::substr($word, 0, PS_SEARCH_MAX_WORD_LENGTH)).'%\''

);

if ($word[0] != '-')

$scoreArray[] = 'sw.word LIKE \''.pSQL(Tools::substr($word, 0, PS_SEARCH_MAX_WORD_LENGTH)).'%\'';

}

else

unset($words[$key]);

 

 

Sostituito con

 

$intersectArray[] = 'SELECT distinct p.id_product

FROM ps_product p

LEFT JOIN ps_product_lang pl ON (p.id_product = pl.id_product AND pl.id_lang = '.(int)$id_lang.')

WHERE pl.name LIKE \'%'.pSQL($expr).'%\'';

 

Ricordarsi in "preferenze - performance" di flaggare (e poi togliere) "obbliga la compilazione" per ricompilare il php e...voilà

 

Ora si fa una query diretta sul DB, forse è meno ottimizzata ma almeno funziona.

 

Dovrei anche provare a buttare sull'hosting una versione pulita di prestashop per capire se la mia teoria è corretta ma non ho tempo ora, se qualcuno ha Aruba e ha lo stesso problema mi fa sapere?

Link to comment
Share on other sites

Ho trovato io una possibile soluzione:

 

Mi sono accorto che, mentre nella versione in locale del sito le tabelle ps_search_world e ps_search_index erano piene, in quella hosted rimanevano vuote. Ho anche provato a droppare la tabella remota e caricare quella locale ma niente da fare.

 

Secondo me si tratta di un problema della versione PHP dell'hosting Aruba che non supporta alcune funzioni presenti nel modulo di ricerca/indicizzazione (classes\search.php)

 

Visto che la ricerca nel BO funziona perché al posto delle tabelle search_word and search_index utilizza la query diretta su SQL ho sostituito nel codice di search.php in questo modo:

 

Tolto:

 

foreach ($words AS $key => $word)

if (!empty($word) AND strlen($word) >= (int)Configuration::get('PS_SEARCH_MINWORDLEN'))

{

$word = str_replace('%', '\\%', $word);

$word = str_replace('_', '\\_', $word);

 

$intersectArray[] = 'SELECT id_product

FROM '._DB_PREFIX_.'search_word sw

LEFT JOIN '._DB_PREFIX_.'search_index si ON sw.id_word = si.id_word

WHERE sw.id_lang = '.(int)$id_lang.'

AND sw.word LIKE

'.($word[0] == '-'

? ' \''.pSQL(Tools::substr($word, 1, PS_SEARCH_MAX_WORD_LENGTH)).'%\''

: '\''.pSQL(Tools::substr($word, 0, PS_SEARCH_MAX_WORD_LENGTH)).'%\''

);

if ($word[0] != '-')

$scoreArray[] = 'sw.word LIKE \''.pSQL(Tools::substr($word, 0, PS_SEARCH_MAX_WORD_LENGTH)).'%\'';

}

else

unset($words[$key]);

 

 

Sostituito con

 

$intersectArray[] = 'SELECT distinct p.id_product

FROM ps_product p

LEFT JOIN ps_product_lang pl ON (p.id_product = pl.id_product AND pl.id_lang = '.(int)$id_lang.')

WHERE pl.name LIKE \'%'.pSQL($expr).'%\'';

 

Ricordarsi in "preferenze - performance" di flaggare (e poi togliere) "obbliga la compilazione" per ricompilare il php e...voilà

 

Ora si fa una query diretta sul DB, forse è meno ottimizzata ma almeno funziona.

 

Dovrei anche provare a buttare sull'hosting una versione pulita di prestashop per capire se la mia teoria è corretta ma non ho tempo ora, se qualcuno ha Aruba e ha lo stesso problema mi fa sapere?

Ma l'hai sperimentato? Funziona?

Link to comment
Share on other sites

  • 10 months later...
  • 2 weeks later...

Io ho provato a fare la modifica ho una versione 1.5.5 e sinceramente non funziona.

Come posso fare?

 

E' passato un po' di tempo quindi non ricordo con esattezza. Se però nel backoffice la ricerca funziona ma nel frontoffice no questa soluzione deve funzionare per forza. Quando hai modificato il codice dal backoffice hai impostato di ricompilare il codice?

Link to comment
Share on other sites

  • 3 weeks later...

ciao mi intrometto nella discussione,

 

soulbo prova ad andare su BO --> PREFERENZE --> RICERCA  un po sotto trovi la scritta prodotti indicizzati , che numeri ci sono scritti li ??

 

Ciao giuliopowa i prodotti sono indicizzati quello che invece vorrei modificare è proprio la ricerca nel front office.

Vorrei che facesse la ricerca anche parziale. Mi spiego meglio se io codifico un prodotto con W345GT, vorrei che anche cercando 45GT lo trovasse oppure se io codifico un prodotto W-345GT cercando W345 lo trovasse comunque. Questa sarebbe una ricerca fatta molto bene. 

Link to comment
Share on other sites

Cosa intendi per ricompilare, mi potresti dire i passaggi precisi.

Grazie

Intendo che se fai qualsiasi modifica al codice PHP questa non viene presa a meno che nel backoffice non sia specificato (olmeno era così per una versione un po' più vecchia dell'attuale). Il parametro da modificare era nel backoffice sotto parametri avanzati, prestazioni, cache template, forza compilazione. Fai refresh della pagina e poi lo rimetti come prima. Ho visto che nella 1.5.6.1 in automatico rimane spuntata "conpila i file del template se sono stati aggiornati quindi forse non è necessario". Il mio problema che poi ho scoperto essere legato all'hosting aruba è che la ricerca nel frontoffice non funzionava proprio (non trovava nessun articolo). Nel backoffice invece andava. Quindi ho preso il pezzo di codice del modulo di ricerca del BO, l'ho sostituito a quello del FO, ricompilato e bam, è partito

Link to comment
Share on other sites

Intendo che se fai qualsiasi modifica al codice PHP questa non viene presa a meno che nel backoffice non sia specificato (olmeno era così per una versione un po' più vecchia dell'attuale). Il parametro da modificare era nel backoffice sotto parametri avanzati, prestazioni, cache template, forza compilazione. Fai refresh della pagina e poi lo rimetti come prima. Ho visto che nella 1.5.6.1 in automatico rimane spuntata "conpila i file del template se sono stati aggiornati quindi forse non è necessario". Il mio problema che poi ho scoperto essere legato all'hosting aruba è che la ricerca nel frontoffice non funzionava proprio (non trovava nessun articolo). Nel backoffice invece andava. Quindi ho preso il pezzo di codice del modulo di ricerca del BO, l'ho sostituito a quello del FO, ricompilato e bam, è partito

 

Scusa posso chiederti quale pezzo di codice hai preso e dove lo hai sostituito. Grazie

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...