2008-09-15 8 views
5

क्या कोई भी मानक लिंक्टोस्क्ल क्वेरी सिंटैक्स का उपयोग करके मनमाने ढंग से खोजशब्दों की किसी भी संख्या के लिए पूर्ण पाठ खोज (FREETEXT() CONTAINS()) करने का एक अच्छा तरीका है?LinqToSql और पूर्ण पाठ खोज - क्या यह किया जा सकता है?

मैं स्पष्ट रूप से एक संग्रहित प्रक्रिया का उपयोग करने से बचने के लिए या एक गतिशील एसक्यूएल कॉल उत्पन्न करना चाहता हूं।

जाहिर है मैं सिर्फ खोज स्ट्रिंग में एक पैरामीटर पर एक sproc FREETEXT() का उपयोग करता है या इसमें शामिल है() है कि करने के लिए पंप सकता है, लेकिन मैं खोज के साथ और अधिक रचनात्मक हो सकता है और जैसे प्रश्नों का निर्माण करने की उम्मीद कर रहा था:

"पेपरोनी पिज्जा" और बर्गर, "सेब पाई" नहीं।

पागल मुझे पता है - लेकिन यह सीधे LinqToSql से ऐसा करने में सक्षम नहीं होगा? इसे प्राप्त करने के तरीके पर कोई सुझाव बहुत सराहना की जाएगी।

अद्यतन: मुझे लगता है कि मैं कुछ here करने पर हो सकता है ...

इसके अलावा: मैं वापस लुढ़का मेरे सवाल का शीर्षक के लिए किए गए परिवर्तन, क्योंकि यह वास्तव में मैं क्या पूछ रहा था के अर्थ बदल दिया है। I पता है कि पूर्ण पाठ खोज LinqToSql में समर्थित नहीं है - अगर मैं उसे जानना चाहता तो मैं उस प्रश्न से पूछता। इसके बजाए - मैंने संपादन-खुश-ट्रिगर-उंगली वाले लोगों को खुश करने के लिए अपना शीर्षक अपडेट किया है।

उत्तर

4

दुर्भाग्य से LINQ से SQL पूर्ण पाठ खोज का समर्थन नहीं करता है।

वहाँ उत्पाद का एक समूह है जो मुझे लगता है कि: Lucene.NET, NHibernate खोज दिमाग में आता है। NHibernate खोज के साथ संयुक्त एनएचबेर्नेट के लिए LINQ शायद उस कार्यक्षमता को देगी, लेकिन बीटा में दोनों अभी भी गहरे हैं।

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

यहाँ 'tvf_SearchStories:

+0

अरे जॉन, इसके लिए धन्यवाद। मैं सिद्धांत में आपके उत्तर से खुश हूं और मुझे पता है कि मैं अमूर्तता की एक और परत जोड़ सकता हूं। आदर्श नहीं है - साथ ही कंटेनस() एसपीआरओसी लिख सकते हैं और हर किसी के लिए लिंक का उपयोग कर सकते हैं। मेरा सवाल है "क्या यह लिंक का उपयोग करके किया जा सकता है"? यदि नहीं, तो आपका जवाब पर्याप्त होगा। – RobertTheGrey

+0

मैंने इस के लिए Lucene.NET का उपयोग करने का निर्णय लिया है और यह वास्तव में बहुत अच्छी तरह से काम करता है। अब मुझे बस मेमकैच चलाना होगा और मुझे शायद ही डीबी को हिट करने की आवश्यकता होगी ;-) – RobertTheGrey

5

मैं, पूर्ण पाठ खोज घटक संपुटित करने के लिए एक मेज महत्वपूर्ण समारोह का उपयोग करके यह चारों ओर पाने के लिए प्रबंधन किया है तो मेरे LINQ अभिव्यक्ति देरी निष्पादन के लाभ को बनाए रखने के भीतर यह संदर्भित 'तालिका मूल्यवान फ़ंक्शन है जो आंतरिक रूप से पूर्ण पाठ खोज का उपयोग करता है

संबंधित मुद्दे