2010-05-05 8 views
0

J'ai ce simple code de recherche Lucene (modifié à partir http://www.lucenetutorial.com/lucene-in-5-minutes.html)Lucene HTMLFormatter sauter le dernier caractère

class Program 
    { 
     static void Main(string[] args) 
     { 

      StandardAnalyzer analyzer = new StandardAnalyzer(); 
      Directory index = new RAMDirectory(); 
      IndexWriter w = new IndexWriter(index, analyzer, true, 
        IndexWriter.MaxFieldLength.UNLIMITED); 
      addDoc(w, "Table 1 <table> content </table>"); 
      addDoc(w, "Table 2"); 
      addDoc(w, "<table> content </table>"); 
      addDoc(w, "The Art of Computer Science"); 
      w.Close(); 


      String querystr = "table"; 


      Query q = new QueryParser("title", analyzer).Parse(querystr); 
      Lucene.Net.Search.IndexSearcher searcher = new 
      Lucene.Net.Search.IndexSearcher(index); 
      Hits hitsFound = searcher.Search(q); 

      SimpleHTMLFormatter formatter = new SimpleHTMLFormatter("*", "*"); 

      Highlighter highlighter = null; 
      highlighter = new Highlighter(formatter, new QueryScorer(searcher.Rewrite(q))); 

      for (int i = 0; i < hitsFound.Length(); i++) 
      { 
       Console.WriteLine(highlighter.GetBestFragment(analyzer, "title", hitsFound.Doc(i).Get("title"))); 
      // Console.WriteLine(hitsFound.Doc(i).Get("title")); 
      } 
      Console.ReadKey(); 



     } 
     private static void addDoc(IndexWriter w, String value) 
     { 
      Document doc = new Document(); 
      doc.Add(new Field("title", value, Field.Store.YES, Field.Index.ANALYZED)); 
      w.AddDocument(doc); 
     } 
    } 

mis en surbrillance les résultats semblent toujours ignorer la fermeture « > » de ma dernière balise de table. Aucune suggestion?

Répondre

0

Résolu. Apparemment, ma version de Highlighter.Net était archaïque. Mise à niveau vers 2.3.2.1 Résolu le problème

1

Le surligneur de Lucene, prêt à l'emploi, est conçu pour gérer du texte brut. Cela fonctionnera incorrectement si vous essayez de mettre en évidence HTML ou n'importe quel texte de balisage.

J'ai récemment rencontré le même problème et trouvé une solution dans HTMLStripReader de Solr qui ignore le contenu des balises. La solution est décrite sur mon blog à l'URL suivante.

http://sigabrt.blogspot.com/2010/04/highlighting-query-in-entire-html.html

je aurais pu le code affiché ici, mais ma solution est applicable pour Lucene Java. Pour .Net, vous devez trouver l'équivalent de HTMLStripReader.

+0

Merci pour le lien. +1 pour ça. Mon problème était autre chose cependant. Ajouter une réponse pour ça – Midhat