Recentemente ho notato che quando cerco un argomento specifico, i risultati della ricerca mi mostrano un post a metà dell’argomento invece del primo. Questo accade quando un post all’interno dell’argomento contiene lo stesso termine di ricerca incluso nel titolo dell’argomento. Ecco due esempi recenti da http://community.wanikani.com:
Ho inserito questa segnalazione in #feature perché non sono al 100% sicuro che abbia mai funzionato nel modo che descrivo. Tuttavia, cerco il secondo termine sopra più volte all’anno e sono quasi certo che in passato i risultati della ricerca restituissero il primo post dell’argomento. Se ciò è cambiato involontariamente in qualche momento, potreste considerarlo un bug.
So che esiste un’opzione di ricerca avanzata per cercare solo nei titoli degli argomenti, ma in questo caso sembra superflua. Dato che il termine di ricerca corrisponde a molti post nell’argomento oltre che al titolo stesso, penso che dovrebbe dare automaticamente priorità alla corrispondenza con il titolo e restituire il primo post.
Sì, ne abbiamo discusso a lungo. In generale, preferisco che la ricerca sia molto semplice e privilegi sempre la prima corrispondenza nell’argomento, indipendentemente dal punteggio. È molto più facile da spiegare alle persone; il punteggio sembra molto arbitrario e magico.
Comprendo la richiesta nel thread originale di permettere alla ricerca di fare riferimento al thread stesso (cioè al primo messaggio) se il titolo del thread corrisponde ai criteri di ricerca. In caso contrario, fare riferimento al messaggio specifico in cui si verifica la corrispondenza.
Onestamente, finché il primo post (tramite corrispondenza del titolo) viene prioritizzato sopra ogni altra cosa, non mi importa molto del resto, ma quello che dici mi sembra ragionevole. Quando una dozzina di post nel topic corrispondono alla frase esatta che stai cercando, quello effettivamente restituito nei risultati di ricerca sembra certamente arbitrario in questo momento. Restituire sempre il primo post corrispondente nel topic mi sembra una buona soluzione.
Detto questo, l’algoritmo di ricerca dovrebbe probabilmente dare ancora priorità alle corrispondenze esatte, per assicurarsi che un post precedente che corrisponde solo parzialmente al termine di ricerca non venga prioritizzato rispetto a un post successivo che lo corrisponde esattamente. Non so se ciò sia rilevante, dato che non conosco molto l’algoritmo. In ogni caso, come ho detto prima, penso che tutti questi dettagli siano molto meno importanti rispetto al dare priorità alla corrispondenza del titolo su tutto il resto.
Continuo a essere taggato da persone che collegano un mio post a metà di un argomento, quando invece volevano condividere l’argomento stesso. L’approccio attuale sta certamente creando confusione.
Sì @tgxworld e @sam, questo deve essere cambiato. Siamo ben oltre la regola del 3 qui. La corrispondenza del titolo dovrebbe avere un peso massiccio da supernova buco nero nel ranking.
Non credo che le cose possano essere così semplici da dare sempre priorità al primo post di un argomento, perché modificare uno specifico scenario di ricerca influenzerà un altro. Considera il seguente scenario:
L’argomento X e l’argomento Y contengono entrambi post che corrispondono al termine di ricerca “discourse”.
Il post numero 1 e il post numero 100 nell’argomento X corrispondono al termine di ricerca “discourse”.
Il post numero 100 ha un punteggio più alto poiché il suo contenuto è una corrispondenza molto migliore per il termine di ricerca “discourse”.
Il post numero 1 dell’argomento Y corrisponde al termine di ricerca “discourse”.
Il post numero 1 dell’argomento Y ha un punteggio più alto rispetto al post numero 1 dell’argomento X poiché il suo contenuto è più pertinente al termine di ricerca “discourse”.
Con l’approccio precedente, prendevamo il punteggio del post numero 100 dell’argomento X per confrontarlo con il post numero 1 dell’argomento Y. In questo caso, il post numero 1 dell’argomento X appare più in alto nei risultati di ricerca rispetto al post numero 1 dell’argomento Y, anche se il post numero 1 dell’argomento Y corrisponde chiaramente meglio al termine di ricerca rispetto al post numero 1 dell’argomento X. Questo equivale a classificare gli argomenti prendendo il punteggio più alto tra i post dell’argomento.
Se ci limitassimo a prendere il primo post di un argomento che corrisponde al termine di ricerca, finiremmo per escludere post che sono una corrispondenza migliore ma hanno un numero di post più alto in un argomento, il che suscita domande sul perché questo post non sia stato incluso nei risultati di ricerca.
Credo che la mia principale obiezione a quanto proposto sia che la ricerca, di default, cerca post, quindi il corpo di un post è effettivamente ciò che un utente sta cercando, non il titolo. Il titolo ci aiuta a filtrare tutti gli argomenti per trovare i post giusti da cercare.
In realtà diamo un peso maggiore alla corrispondenza del titolo. L’unico problema è che il titolo fa parte dei dati di ricerca per tutti i post di un dato argomento, quindi tutti i post beneficiano effettivamente dello stesso peso per le corrispondenze del titolo.
Non credo però che qualcuno stia suggerendo questo. Stiamo dicendo di dare priorità alle corrispondenze del titolo, il che non è lo scenario che hai appena descritto. Quando il titolo corrisponde al termine di ricerca, dovrebbe aumentare specificamente la posizione del primo post, non di tutti i post nell’argomento.
Non sono d’accordo con questa valutazione. Gli utenti non sono interessati a trovare specificamente i post, ma piuttosto a trovare contenuti. Quando gli argomenti sono denominati correttamente, il titolo è spesso il miglior indicatore di ciò che l’utente desidera e, nella maggior parte dei casi, questo significa iniziare dal primo post.
Almeno nella comunità che uso, ci sono argomenti in alcune sottocategorie che vengono spesso cercati con lo scopo di condividerli quando altri utenti chiedono aiuto. Ottenere un post casuale dell’argomento dai risultati della ricerca invece del primo post ha portato alla condivisione di post errati, con il risultato che gli utenti non ricevono aiuto il prima possibile.
Che sia per la condivisione o per uso personale, penso anche che tu stia sottovalutando quanto spesso gli utenti vogliano semplicemente cercare lo stesso argomento più e più volte, e credo che in questi casi, nella stragrande maggioranza dei casi, gli utenti vogliano o il primo post o riprendere da dove avevano lasciato.
Lo scenario che ho descritto è come funzionava la ricerca in Discourse in passato ed è un comportamento errato.
Penso che questa sia stata una formulazione errata: la ricerca, per impostazione predefinita, cerca una combinazione sia del titolo dell’argomento che del corpo del post.
Sebbene questo possa essere vero, non è sempre così, poiché ciò presuppone che il termine di ricerca corrisponda sempre al titolo dell’argomento. Nei forum di programmazione, a volte cerco frammenti di codice, che non sono qualcosa che apparirà nel titolo.
Ciò che viene proposto non è impossibile, anche se dovremo prendere alcune decisioni tecniche e valutare dei compromessi. Ad esempio, dovremo rimuovere il titolo dell’argomento dai PostSearchData per i post che non sono il primo. Questo garantisce che le corrispondenze del titolo dell’argomento classifichino il primo post più in alto rispetto agli altri post nell’argomento, ma significa comunque che siamo alla mercé dell’algoritmo di classificazione di Postgres.
Ecco un altro esempio per illustrare il mio caso d’uso. Ho cercato “special kanji” su https://community.wanikani.com con l’obiettivo di trovare questo argomento: Special kanji words derived from other words - Kanji - WaniKani Community. Volevo consultare la tabella di dati nel primo post, che è una wiki. Come potete vedere, il mio termine di ricerca corrisponde esattamente all’inizio del titolo dell’argomento. Tuttavia, il primo post non contiene effettivamente la parola “special”, quindi un altro post è stato prioritizzato, semplicemente perché le parole “special” e “kanji” apparivano da qualche parte nel post.
Spero che fornire esempi aggiuntivi come questo sia utile.
@sam, mi chiedo quali siano le tue opinioni al riguardo. La ricerca sta funzionando correttamente perché il “post da qualche parte” contiene i termini di ricerca sia nel titolo che nel corpo, mentre il primo post li contiene solo nel titolo. Sembra controintuitivo voler mostrare il primo post quando un altro post è una corrispondenza molto migliore. Da quello che vedo, ci sono alcune opzioni che possiamo prendere in considerazione:
Tornare al vecchio comportamento. Quando più post in un argomento corrispondono a un determinato termine di ricerca, selezionare sempre il post con il numero più piccolo. Lo svantaggio qui è che il numero più piccolo potrebbe non essere sempre il primo post e il nostro risultato di ricerca potrebbe risultare scadente in tal caso. Ci sono anche casi in cui il corpo di un post è ovviamente una corrispondenza molto migliore ma finisce per essere escluso solo perché un altro post con un numero inferiore nell’argomento corrisponde anch’esso ai termini di ricerca.
Mi chiedo se possiamo risolvere il problema dal lato UX. Invece di avere semplicemente un singolo link che porta al post, forse il titolo del risultato di ricerca porterà sempre al primo post del titolo, mentre l’estratto della ricerca linkerà al post che ha ottenuto il ranking nel risultato di ricerca.
Escludere le informazioni sul titolo dell’argomento dai PostSearchData dei post che non sono il primo post. Dovremo fare qualche esperimento, ma mi aspetto che questo sbilanci pesantemente i risultati di ricerca verso la restituzione dei primi post.
Sono piuttosto propenso a provare l’opzione 2 perché mantiene i nostri risultati di ricerca accurati, offrendo contemporaneamente agli utenti, che sanno cosa stanno cercando, un modo per raggiungere il primo post dai risultati di ricerca.
Mi sembra davvero sgradevole. Questo non è ovvio, a meno che l’utente non abbia l’abitudine di leggere (e interpretare) i dati visualizzati al passaggio del mouse sui link.
Forse si potrebbe considerare una ricerca in due fasi?
Ricerca nei titoli degli argomenti, abbinando solo a CORRISPONDENZA_ESATTA e CONTIENE_TUTTI
Questi verranno posizionati in cima ai risultati, con priorità data a CORRISPONDENZA_ESATTA
Quindi, completa il resto dei risultati utilizzando la ricerca ponderata attuale, escludendo eventuali post di avvio di argomento già catturati nella prima fase.
L’idea è che apporteremo modifiche all’esperienza utente (UX) per renderlo evidente.
L’idea è valida, ma non credo sia possibile eseguire in modo efficiente la query di ricerca su Postgres, poiché non c’è supporto per gli indici quando si utilizzano gli operatori like e ilike per gli abbinamenti. Un altro fattore da considerare è che non esiste un modo per classificare gli abbinamenti esatti o quelli che contengono tutte le parole. È per questo motivo che facciamo affidamento sulle funzionalità di ricerca full-text fornite da Postgres.
Penso che avresti probabilmente bisogno di un modo più ovvio per distinguere i link al primo post e ai post corrispondenti. Non credo che la tua proposta sarebbe intuitiva. (Ma capisco che fosse solo un esempio.)
Un’ipotesi che ho considerato è mostrare tutti i post corrispondenti di un argomento, magari utilizzando un meccanismo di espansione/collasso. Quindi mostreresti il post meglio corrispondente da tutti gli argomenti corrispondenti, simile alla vista attuale, ma poi ci sarebbe una freccia o qualcosa di simile accanto a ogni argomento corrispondente per espandere l’elenco e mostrare tutti i post corrispondenti in quell’argomento. Potrebbe essere eccessivo, non lo so.
Penso che valga sicuramente la pena provarlo. Risolverebbe il problema di cui ho parlato dando priorità alle corrispondenze dei titoli. Ma risolverebbe anche lo scenario che hai menzionato sui forum di programmazione @tgxworld, dato che, come hai detto, gli snippet di codice non sarebbero nel titolo.
Ovviamente, se non è pratico, immagino che sia un’altra storia. Forse qualcun altro sa come renderlo abbastanza performante.
Affidarsi alla tecnologia esistente è ottimo, ma solo quando risolve adeguatamente il tuo caso d’uso. Sembra che la ricerca full-text di Postgres non sia sufficiente da sola, dati i problemi sollevati in questo argomento. Sembra che un approccio ibrido come quello proposto da @Sailsman63 sarebbe ideale, se esiste un modo per renderlo fattibile.
Dato che sembra non esserci una “risposta semplice” al momento, penso onestamente che questa sia l’opzione migliore mentre si lavora a una soluzione più completa. Qualsiasi cambiamento UX o nuovo algoritmo che richieda ottimizzazioni del database o altre considerazioni sulle prestazioni potrebbe richiedere del tempo per essere implementato correttamente, quindi penso che ripristinare il vecchio comportamento sarebbe ragionevole come soluzione temporanea.
Purtroppo, non è semplice dire che passeremo a qualcosa di meglio per noi. Dobbiamo considerare i compromessi sia dal punto di vista aziendale che tecnico prima di prendere la nostra decisione.
Esito a farlo perché non ci porta verso una soluzione migliore. Anzi, sono fermamente convinto che il vecchio comportamento sia errato. I casi descritti in questa discussione si basano su un singolo scenario in cui sembra intuitivo che il risultato della ricerca colleghi solo al primo post, perché l’utente che cerca sa esattamente quale argomento vuole trovare. Arriverei a sostenere che gli utenti che già conoscono il titolo dell’argomento che stanno cercando dovrebbero utilizzare il filtro di ricerca avanzato in:title. Nella maggior parte dei casi di ricerca, il contenuto del post è molto importante e una corrispondenza parziale sul titolo dell’argomento non dovrebbe significare che debba essere mostrato il primo post dell’argomento.
Forse ciò sarebbe sufficiente se la ricerca avanzata fosse più semplice. Personalmente la trovo incredibilmente difficile da usare perché ci sono semplicemente troppe opzioni, rendendo difficile trovare quella di cui ho bisogno. Forse sono solo io
Forse sarebbe opportuno rendere sempre visibile la casella di controllo in:title. O, meglio ancora, potrebbe avere senso aggiungere un menu a tendina a sinistra della casella di input con opzioni come Tutto, Titoli e Post, per permettere all’utente di specificare l’ambito della ricerca. Questo tipo di filtro di ricerca è abbastanza comune, quindi (spero) risulterebbe intuitivo per gli utenti utilizzarlo o ignorarlo come preferiscono. Come esempio comparabile, IMDb permette di cercare tra Tutto, Titoli, Attori, ecc. (Non ricordo esattamente le opzioni a memoria.) Dovreste trovare un modo per differenziare “Tutto” e “Post”, dato che attualmente sono praticamente la stessa cosa, ma forse questo approccio vale la pena di essere considerato.
Dovrò chiarire con @sam su questo punto, perché è così che il nostro indice di ricerca è stato costruito finora. In realtà, l’indice di ricerca per ogni post include il titolo, il nome della categoria e anche i nomi dei tag, anche se il post non è il primo.