Capacità/limiti della ricerca full-text del database?

Continuando la discussione da I risultati della ricerca dovrebbero dare priorità al primo post nell’argomento quando il titolo corrisponde al termine di ricerca:

Questo è molto fuori tema rispetto alla discussione originale, ma non sono sicuro se essere semplicemente sorpreso o completamente sconvolto:

(Evidenziatura mia)

Non intendo contestare le scelte relative al database, poiché non ho alcuna esperienza in questo ambito, ma questa affermazione implica che PostgreSQL non distingua internamente tra questi casi. Questo tipo di limite è comune nei motori di ricerca testuale dei database? Se sì, ciò spiegherebbe ampiamente perché la maggior parte delle funzionalità di ricerca dei siti sono completamente inutili…

Lascia che chiarisca questa affermazione. Per le corrispondenze esatte, non c’è bisogno di classificare i risultati poiché o c’è una corrispondenza o non c’è. Per le corrispondenze parziali, come decidiamo quali dovrebbero essere classificate più in alto?

  1. Questa è la mia parola chiave di ricerca
  2. La parola chiave di ricerca è interessante
  3. La parola chiave di ricerca è più interessante qui poiché il titolo è più lungo

Tutti i titoli sopra contengono la parola chiave di ricerca, quindi la domanda è: come classifichiamo i risultati? Attualmente ci affidiamo alla funzione di classificazione di Postgres per determinarlo per noi.

Le classifiche tentano di misurare quanto i documenti siano pertinenti a una specifica query, in modo che quando ci sono molte corrispondenze, quelle più rilevanti possano essere mostrate per prime. PostgreSQL fornisce due funzioni di classificazione predefinite, che tengono conto di informazioni lessicali, di prossimità e strutturali; cioè, considerano quanto spesso i termini della query appaiono nel documento, quanto sono vicini tra loro nel documento e quanto è importante la parte del documento in cui si verificano. Tuttavia, il concetto di rilevanza è vago e molto specifico dell’applicazione. Diverse applicazioni potrebbero richiedere informazioni aggiuntive per la classificazione, ad esempio la data di modifica del documento. Le funzioni di classificazione integrate sono solo esempi. Puoi scrivere le tue funzioni di classificazione e/o combinare i loro risultati con fattori aggiuntivi per adattarli alle tue esigenze specifiche.

Ci sono molti fattori che Postgres prende in considerazione, ma alla fine la classificazione rimane piuttosto vaga e dipende davvero da sito a sito, a seconda di come è strutturato il contenuto del forum. Il nostro obiettivo qui su Discourse è fornire un buon valore predefinato che funzioni per la maggior parte dei forum esistenti.

5 Mi Piace

Ah… Quindi, probabilmente c’è stato un fraintendimento da parte mia. Pensavo che tu volessi dire che il database non riesce a distinguere tra una corrispondenza esatta e una corrispondenza per contenuto.

Nel contesto della priorità delle corrispondenze nei titoli degli argomenti, come stavamo discutendo inizialmente:

  • In realtà, per il mio scopo, definirei tutti e tre i tuoi esempi “corrispondenze esatte”.
  • “C’è un termine che puoi cercare” sarebbe una corrispondenza per contenuto.

  • I tuoi tre esempi hanno la stessa priorità. Elencale semplicemente nell’ordine in cui vengono trovate.
  • Il mio esempio ha una priorità inferiore rispetto a questi.
  • Tuttavia, tutti questi hanno priorità rispetto a qualsiasi post che risulti pertinente solo grazie al contenuto del post senza considerare il titolo.

Se sei preoccupato che i primi risultati della ricerca siano saturi di corrispondenze per “Titolo”, utilizza la ricerca nel titolo solo quando il termine di ricerca ha raggiunto un livello minimo di complessità. L’obiettivo è avere al massimo 4 o 5 corrispondenze per “Titolo” nella parte superiore dei risultati di ricerca. (Anche se vedo che probabilmente sarebbe difficile determinare questo).