Pregunta

¿A alguien se le ha ocurrido una buena forma de realizar búsquedas de texto completo (FREETEXT() CONTAINS()) para cualquier número de palabras clave arbitrarias utilizando la sintaxis de consulta estándar LinqToSql?

Obviamente, me gustaría evitar tener que usar un proceso almacenado o generar llamadas de SQL dinámico.

Obviamente, podría simplemente introducir la cadena de búsqueda en un parámetro de un SPROC que use FREETEXT() o CONTAINS(), pero esperaba ser más creativo con la búsqueda y generar consultas como:

"pizza de pepperoni" y hamburguesa, no "tarta de manzana".

Lo sé, es una locura, pero ¿no sería genial poder hacer esto directamente desde LinqToSql?Cualquier consejo sobre cómo lograr esto sería muy apreciado.

Actualizar:Creo que puedo estar en algo aquí...

También:Rechacé el cambio realizado en el título de mi pregunta porque en realidad cambió el significado de lo que estaba preguntando.I saber esa búsqueda de texto completo no es compatible con LinqToSql; habría hecho esa pregunta si quisiera saberlo.En lugar de eso, he actualizado mi título para apaciguar a las masas que editan y tienen dedos en el gatillo.

¿Fue útil?

Solución

Lamentablemente, LINQ to SQL no admite la búsqueda de texto completo.

Hay un montón de productos que creo que podrían:Me viene a la mente Lucene.NET, NHibernate Search.LINQ para NHibernate combinado con NHibernate Search probablemente brindaría esa funcionalidad, pero ambos aún están en fase beta.

Otros consejos

Me las arreglé para solucionar esto usando una función con valores de tabla para encapsular el componente de búsqueda de texto completo, luego hice referencia a él dentro de mi expresión LINQ manteniendo los beneficios de la ejecución retrasada:

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)));

Aquí 'tvf_SearchStories' es la función con valores de tabla que utiliza internamente la búsqueda de texto completo

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top