2010-11-30 25 views
10

क्या आप कृपया बता सकते हैं कि RavenDb में सरल पूर्ण-पाठ खोज कैसे करें। डेटाबेस संग्रहीत दस्तावेज़ है: मूवी {नाम = "कैरेबियन के समुद्री डाकू"}। मेरी इच्छा है कि यह दस्तावेज़ खोज वाक्यांश "समुद्री डाकू कैरबियन" या शब्दों के किसी अन्य संयोजन पर पाया गया था।RavenDB पूर्ण-पाठ खोज

उत्तर

12

क्या आप के बारे में चिंता कर रहे हैं पूरा टेक्स्ट से कोई लेना देना नहीं है - डिफ़ॉल्ट रूप से Lucene एक या आधार पर काम करता है और क्या आप चाहते हैं एक और

मुझे क्या करना चाहते हैं, तो मैं तुम्हें थे

String[] terms = searchTerm.Split(" "); // Or whatever the string.split method is 

और

.Where("Name:(" + String.Join(" AND ", terms) + ")"); 

आपका सूचकांक

public class Movie_ByName : AbstractIndexCreationTask 
{ 
    public override IndexDefinition CreateIndexDefinition() 
    { 
     return new IndexDefinitionBuilder<Movie> 
        { 
         Map = movies => from movie in movies 
             select new { movie.Name, market.Id }, 

         Indexes = 
          { 
           {x => x.Name, FieldIndexing.Analyzed} 
          } 
        } 
      .ToIndexDefinition(DocumentStore.Conventions); 
    } 
कुछ ऐसा दिखाई देगा

आपको भंडारण की आवश्यकता नहीं है, आप किसी भी समय सीधे ल्यूसीन से डेटा का अनुरोध नहीं कर रहे हैं। हो सकता है कि आप एक इंडेक्स भी नहीं चाहते (आप वास्तव में फील्डइंडेक्सिंग चाहते हैं। विश्लेषण किया गया है, और यहां केवल डायनामिक प्रश्नों का उपयोग करके दूर हो सकता है)

हालांकि आप तक।

+0

या searchTerm.Replace है, हालांकि शायद:

public class MyIndex: AbstractIndexCreationTask<MyDocument> { public MyIndex() { Map = docs => from d in docs select new { d.MyTextField }; Index(x => x.MyTextField, FieldIndexing.Analyzed); } } 

तो ग्राहक से क्वेरी:

सबसे पहले, कि अपने क्षेत्र अनुक्रमित और विश्लेषण किया जाता है सुनिश्चित करें आप खाली प्रविष्टियों से सावधान रहना चाहेंगे और वह सब कुछ। –

+1

बाजार/बाजार पाठ किसी प्रतिलिपि से किसी प्रतिलिपि से छोड़ा गया है? –

+0

हां, मैंने दूसरे प्रश्न का प्रयोग उदाहरण के रूप में –

16

बोरिस, रॉब के उत्तर में सही इंडेक्स है, लेकिन यह पूछताछ के लिए थोड़ा अजीब है। आपको लगता है कि उपयोग कर सकते हैं:

session.Query<Movie, Movie_ByName>() 
     .Search(x=>x.Name, searchTerms) 
     .ToList() 

कि

+7

वह होगा .... ??? –

+26

@RonnieOverby और वह वह क्षण था जब वह भालू द्वारा खाया गया था। – ehdv

+2

... काम। <- एक अनुमान। –

2

यहाँ कैसे मैं एक "Anding" शब्द खोज हासिल की है। ("," "और")

var query = session.Query<MyDocument, MyIndex>(); 

    query = theSearchText 
       .Split(new[] {" "}, StringSplitOptions.RemoveEmptyEntries) 
       .Aggregate(query, (q, term) => 
        q.Search(x => x.MyTextField, term, options: SearchOptions.And));