Domanda

Qualcuno ha trovato un buon modo per eseguire ricerche di testo completo (FREETEXT() CONTAINS()) per un numero qualsiasi di parole chiave arbitrarie utilizzando la sintassi di query LinqToSql standard?

Ovviamente vorrei evitare di dover utilizzare uno Stored Proc o generare chiamate SQL dinamiche.

Ovviamente avrei potuto semplicemente inserire la stringa di ricerca su un parametro in uno SPROC che utilizza FREETEXT() o CONTAINS(), ma speravo di essere più creativo con la ricerca e creare query come:

"pizza ai peperoni" e hamburger, non "torta di mele".

Pazzesco, lo so, ma non sarebbe bello poterlo fare direttamente da LinqToSql?Eventuali suggerimenti su come raggiungere questo obiettivo sarebbero molto apprezzati.

Aggiornamento:Penso che potrei aver scoperto qualcosa Qui...

Anche:Ho annullato la modifica apportata al titolo della mia domanda perché in realtà ha cambiato il significato di ciò che stavo chiedendo.IO Sapere che la ricerca del testo completo non è supportata in LinqToSql: avrei posto questa domanda se avessi voluto saperlo.Invece, ho aggiornato il mio titolo per placare le masse che modificano con facilità.

È stato utile?

Soluzione

Purtroppo LINQ to SQL non supporta la ricerca full-text.

Ci sono un sacco di prodotti là fuori che penso potrebbero:Mi viene in mente Lucene.NET, NHibernate Search.LINQ for NHibernate combinato con NHibernate Search probabilmente fornirebbe questa funzionalità, ma entrambi sono ancora in fase beta.

Altri suggerimenti

Sono riuscito a aggirare questo problema utilizzando una funzione con valori di tabella per incapsulare il componente di ricerca del testo completo, quindi facendovi riferimento all'interno della mia espressione LINQ mantenendo i vantaggi dell'esecuzione ritardata:

string q = query.Query;
IQueryable<Story> stories = ActiveStories
                        .Join(tvf_SearchStories(q), o => o.StoryId, i => i.StoryId, (o,i) => o)
                        .Where (s => (query.CategoryIds.Contains(s.CategoryId)) &&
                                    /* time frame filter */
                                (s.PostedOn >= (query.Start ?? SqlDateTime.MinValue.Value)) &&
                                (s.PostedOn <= (query.End ?? SqlDateTime.MaxValue.Value)));

Qui "tvf_SearchStories" è la funzione con valori di tabella che utilizza internamente la ricerca full-text

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top