Metti in ordine di partita COME
-
16-10-2019 - |
Domanda
I chiedendo come posso implementare SQL per ottenere i risultati ordinati per migliore corrispondenza di una simile predicato. Ho 100K articoli nel database e quando l'utente chiama alcuni elementi da parte del nome. Voglio mostrare i risultati ordinati dal miglior match della domanda chiesto.
cercherò di descrivere che da pseudo codice
select
*
from
articles
where item_nale like '%'+@user_input +'%'
order by "BEST MATCH"
Soluzione
Non è possibile calcolare la pertinenza con il predicato LIKE. Per SQL Server (che da precedenti domande a mio avviso è la vostra piattaforma?) Ti consigliamo di guardare pieno ricerca che supporta scoring / ranking risultati per rilevanza.
Altri suggerimenti
Dal momento che tutte le partite sono per abbinare il modello LIKE in modo da includere, la cosa semplice da fare è scontato che i valori più brevi per la colonna state cercando una corrispondenza sono "migliori" corrispondenze, come sono più vicino al valore esatto del modello.
ORDER BY LEN(item_nale) ASC
In alternativa, si potrebbe supporre che i valori in cui il modello partita appaiono in precedenza sono "migliori" le partite.
ORDER BY PATINDEX('%' + @user_input + '%', item_nale) ASC
In alternativa è possibile combinare le due cose; cercare prime partite prima, e all'interno di questi, preferiamo i valori più brevi.
ORDER BY PATINDEX('%' + @user_input + '%', item_nale) ASC, LEN(item_nale) ASC
Non è sofisticato come quello indicizzazione full-text fa, e rappresenta solo per corrispondenza su una singola colonna, ma dà risultati abbastanza decente.
Generate the Levenshtein function, and order by this field.
If you have this function, it could be:
select
field1,
field2,
field3,
fieldN,
item_nale,
MyLevenshteinFunction(item_nale,@user_input) LevenshteinDistance
from (
select
field1,
field2,
field3,
fieldN,
item_nale,
LevenshteinDistance
from
articles
where item_nale like '%'+@user_input +'%'
) as result
order by LevenshteinDistance DESC