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"
È stato utile?

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.

Ref: https://www.red-gate.com/simple-talk/blogs/string-comparisons-in-sql-edit-distance-and-the-levenshtein-algorithm/

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a dba.stackexchange
scroll top