Ma come dovrei abbinare TST-DFS se l'utente ha digitato TST DFS?
Vorrei che SKU per avere una rilevanza dei ricorda 8, al posto del pieno 10 ..
Se ho ricevuto la domanda giusta, la risposta è in realtà facile.
Bene, se la tua query è forge prima di inviarla a mysql.
Ok, diciamo che abbiamo $query
e contiene TST-DFS
.
Ci concentreremo su intervalli di tempo? Suppongo che dovremmo, come la maggior parte dei motori di ricerca fanno, quindi:
$ok=preg_match_all('#\w+#',$query,$m);
Ora se questo modello ha trovato ... $m[0]
contiene l'elenco delle parole in $query
.
Questo può essere sintonizzato sulla SKU, ma la corrispondenza con parole complete in una moda AND è praticamente ciò che l'utente presume sta accadendo. (Come accade su google e yahoo)
Poi abbiamo bisogno di cucinare un $expr
un'espressione che sarà iniettato nella nostra query finale.
if(!$ok) { // the search string is non-alphanumeric
$expr="false";
} else { // the search contains words that are no in $m[0]
$expr='';
foreach($m[0] as $word) {
if($expr)
$expr.=" AND "; // put an AND inbetween "LIKE" subexpressions
$s_word=addslashes($word); // I put a s_ to remind me the variable
// is safe to include in a SQL statement, that's me
$expr.="word LIKE '%$s_word%'";
}
}
Ora $expr
dovrebbe essere simile "words LIKE '%TST%' AND words LIKE '%DFS%'"
con quel valore, possiamo costruire la query finale:
$s_expr="($expr)";
$s_query=addslashes($query);
$s_fullquery=
"SELECT (Product,word,if((word LIKE '$s_query'),relevancy,relevancy-2) as relevancy) ".
"FROM some_index ".
"WHERE word LIKE '$s_query' OR $s_expr";
che recita, per "TST-DFS":
SELECT (Product,word,if((word LIKE 'TST-DFS'),relevancy,relevancy-2) as relevancy)
FROM some_index
WHERE word LIKE 'TST-DFS' OR (word LIKE '%TST%' AND word LIKE '%DFS%')
Come potete vedere, nella prima riga SELECT
, se la partita è parziale, MySQL ritorno pertinenza-2
Nella terza, la clausola WHERE
, se la partita piena fallisce, $s_expr
, query corrispondenza parziale abbiamo cucinato in anticipo, è provato anziché.
non è possibile utilizzare le funzionalità 'FULLTEXT' di MySQL, o è che cosa si intende quando si dice "indice"? – Bojangles
Il problema è che ho molte informazioni importanti, ma FULLTEXT di MySQL non sa che è importante (come i numeri di sku, il nome del prodotto e altre parole certe). Quindi sto indicizzando ogni parola in ogni prodotto, e non credo che il FULLTEXT di MySQL possa aiutarmi a cercare tra le righe. – Ben
Oh giusto. Per quanto posso vedere, no, 'FULLTEXT' non sarebbe affatto utile. Davvero un peccato, visto che è una parte meravigliosa di MySQL. – Bojangles