2011-03-24 4 views
1

현재 코드를 사용하여 lucene 출력에서 ​​조각을 강조 표시하지만 결과는 항상 문자열로 검색됩니다. 내가 검색 무엇이든lucene highlighter (3.0)를 사용하여 쿼리 용어를 강조 표시 한 결과 만 표시

var parser = new MultiFieldQueryParser(new[]{"contents","PageName"}, 
    new StandardAnalyzer()); 
Query query = parser.Parse(searchString); 

Hits results = searcher.Search(query); 
var hits = new List<LuceneSearchResult>(); 
for (int index = 0; index < results.Length(); index++) 
{ 
    Document document = results.Doc(index); 

    var searchResult = new LuceneSearchResult(); 
    searchResult.Document = document; 
    searchResult.Query = searchString; 
    searchResult.Id = document.GetField("ID").StringValue(); 
    searchResult.Score = results.Score(index); 
    hits.Add(searchResult); 
} 

강조 표시된 조각에 대해 반환되는 문자열과 정확히 동일합니다 : 그것은 여기에 도움이되는 경우

var parser = new MultiFieldQueryParser(new[] { "contents", "PageName" }, 
    new StandardAnalyzer());     
Query query = parser.Parse(Query); 

QueryScorer scorer = new QueryScorer(query); 
Formatter formatter = new SimpleHTMLFormatter(config.HighlightFormatterPrefix, 
    config.HighlightFormatterSuffix); 
Highlighter highlighter = new Highlighter(formatter, scorer); 
highlighter.SetTextFragmenter(new SimpleFragmenter(100)); 
TokenStream stream = new StandardAnalyzer().TokenStream("contents", 
    new StringReader(Query)); 
return highlighter.GetBestFragments(stream, Query, 2, "."); 

쿼리에 사용되는 코드입니다.

답변

0

문제점을 발견했습니다. 페이지 이름이이 포맷터에서 사용 및 변경되는 요약에 유용하지 않을 것 때문에

var parser = new QueryParser("contents", new StandardAnalyzer()); 
Query query = parser.Parse(Query); 
SimpleHTMLFormatter formatter = new SimpleHTMLFormatter(config.HighlightFormatterPrefix, config.HighlightFormatterSuffix); 
QueryScorer fragmentScorer = new QueryScorer(query,"contents"); 
Highlighter highlighter = new Highlighter(formatter, fragmentScorer); 
highlighter.SetTextFragmenter(new SimpleFragmenter(100)); 
TokenStream tokenStream = new SimpleAnalyzer().TokenStream(config.MainContentFieldName, new StringReader(field.StringValue())); 

return highlighter.GetBestFragments(tokenStream, field.StringValue(), 2, "."); 

내가 쿼리에 하나의 필드에 여러 필드에서 변경 : 결과 작업 코드는 결과의 변화였다 SimpleFormatter에

관련 문제