2016-05-05 4 views
0

Ich versuche, Match-Phrasen-Abfrage zu verwenden, aber es ergibt keine Ergebnisse. Was habe ich hier falsch gemacht? Ich benutze Lucene.net 3.0.3Lucene.net Matchphase-Abfrage funktioniert nicht

using (var dir = new RAMDirectory()) 
      { 
       var queryText = "Bruce Wayne"; 
       Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_29); 

       var sampleDocs = new SortedSet<String>() { "Bruce Wayne", "Wayne Bruce", "Bruce Batman Wayne" }; 

       using (var writer = new IndexWriter(dir, analyzer, create: true, mfl: IndexWriter.MaxFieldLength.LIMITED)) 
       { 
        foreach (var sampleDoc in sampleDocs) 
        { 
         var doc = new Document(); 
         doc.Add(new Field("id", Guid.NewGuid().ToString("N"), Field.Store.YES, Field.Index.NOT_ANALYZED)); 
         doc.Add(new Field("name", sampleDoc, Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS)); 

         writer.AddDocument(doc); 
        } 
       } 

       var searcher = new IndexSearcher(dir, true); 

       var query = new PhraseQuery() 
       { 
        Slop = 2 
       }; 

       foreach (var item in queryText.Split(new [] {' '}, StringSplitOptions.RemoveEmptyEntries)) 
       { 
        query.Add(new Term("name", item)); 
       } 

       TopDocs docs = searcher.Search(query, 1000); 
      } 
+0

Dies scheint in Klein ganz gut für mich zu arbeiten (mit 'QUERY =„bruce wayne“' ich drei Ergebnisse). Könnte das Problem sein, dass Sie keine Analyse in Betracht ziehen? "Bruce Wayne" zum Beispiel würde aufgrund der Hauptstädte keine Ergebnisse erzielen. – femtoRgon

Antwort

0

Problem gelöst - ich habe vergessen, den Abfragetext