2011-09-16 25 views
7

Ho un piccolo problema (è quello che spero) con il ranking dei miei risultati di ricerca di ricerca full text nel database mysql. la scrittura ho provato in due modi:Ricerca di testo completo

MODO NATURALE:

SELECT SQL_CALC_FOUND_ROWS *, 
MATCH(productname,keywords) AGAINST('$cl_search') AS score 
FROM products 
WHERE MATCH(productname,keywords) AGAINST('$cl_search') 
ORDER BY score DESC,lastupdated DESC; 

BOOLEANO WAY:

SELECT SQL_CALC_FOUND_ROWS *, 
((MATCH(productname) AGAINST('$cl_search' IN BOOLEAN MODE))+ 
(MATCH(keywords) AGAINST('\"$cl_search\"' IN BOOLEAN MODE))) AS score 
FROM products 
WHERE MATCH(productname,keywords) AGAINST('$cl_search') 
ORDER BY score DESC,lastupdated DESC; 

Mi piace l'indicizzazione ottengo quando cerco in modalità linguaggio naturale, ma come faccio impedire a qualcuno di entrare, ad es. "sacchetto di borsa", come nome prodotto per ottenere buoni risultati di ricerca?

Così ho scritto il modo booleano per risolvere quello, ma 1. è più lento e 2. Non ottengo l'altra indicizzazione di pertinenza del tipo 'rispetto al conteggio delle parole'.

Qualche idea su come ottenere il meglio da entrambi i mondi?

risposta

-3

Abbastanza facile, utilizzare Lucene invece, è molto più avanzato e sicuramente ha opzioni per gestire ciò che si desidera.

1

Che dire scrivere una funzione definita dall'utente, che rimuoverà le parole chiave duplicate? Quindi quale sarà la tua ricerca:

SELECT SQL_CALC_FOUND_ROWS *, 
MATCH(productname,RM_DUP(keywords)) AGAINST('$cl_search') AS score 
FROM products 
    WHERE MATCH(productname,RM_DUP(keywords)) AGAINST('$cl_search') 
    ORDER BY score DESC,lastupdated DESC; 
Problemi correlati