diff -r cf5c74390b98 -r 3e1f76dd2722 searchengine/oss/cl/clucene/src/clucene/search/hits.cpp --- a/searchengine/oss/cl/clucene/src/clucene/search/hits.cpp Wed Aug 18 10:53:26 2010 +0300 +++ b/searchengine/oss/cl/clucene/src/clucene/search/hits.cpp Thu Sep 02 21:37:32 2010 +0300 @@ -12,11 +12,17 @@ #include "filter.h" #include "clucene/search/searchheader.h" //#ifdef USE_HIGHLIGHTER -//#include "CLucene/highlighter/QueryTermExtractor.h" -//#include "CLucene/highlighter/QueryScorer.h" -//#include "CLucene/highlighter/Highlighter.h" -//#include "CLucene/highlighter/SimpleHTMLFormatter.h" -//#include "CLucene/analysis/standard/StandardAnalyzer.h" + +#include "CLucene/highlighter/QueryTermExtractor.h" +#include "CLucene/highlighter/QueryScorer.h" +#include "CLucene/highlighter/Highlighter.h" +#include "CLucene/highlighter/SimpleHTMLFormatter.h" +#include "CLucene/analysis/standard/StandardAnalyzer.h" +#include "clucene/search/prefixquery.h" + +// internal libs +#include "cpixparsetools.h" + //#endif CL_NS_USE(document) @@ -50,7 +56,7 @@ Hits::Hits(Searcher* s, Query* q, Filter* f, const Sort* _sort): query(q), searcher(s), filter(f), sort(_sort) //#ifdef USE_HIGHLIGHTER -// , hl_frag(20) + , hl_frag(20) //#endif { //Func - Constructor @@ -94,40 +100,71 @@ hitDoc->doc = _CLNEW Document; searcher->doc(hitDoc->id, hitDoc->doc); // cache miss: read document //#ifdef USE_HIGHLIGHTER -// CL_NS(document)::Document* document = hitDoc->doc; -// -// const TCHAR* text = document->get(LCPIX_EXCERPT_FIELD); -// -// if(text) -// { -// Query* rwquery = searcher->getrewritten(hitDoc->id, query); -// -// TCHAR * str = rwquery->toString(); -// -// CL_NS2(search,highlight)::QueryScorer hl_scorer(rwquery); -// -// CL_NS2(search,highlight)::Highlighter highlighter(&hl_formatter, &hl_scorer); -// -// highlighter.setTextFragmenter(&hl_frag); -// -// wstring hlText; -// -// StringReader strreader(text); -// -// lucene::analysis::TokenStream * tokenStream = hl_analyzer.tokenStream(LCPIX_EXCERPT_FIELD, &strreader); -// -// TCHAR* result = highlighter.getBestFragments(tokenStream, text, 2,L"..."); -// -// if (result != NULL) -// { -// hlText.append(result); -// -// document->removeField( LCPIX_EXCERPT_FIELD ); -// -// document->add(*_CLNEW Field(LCPIX_EXCERPT_FIELD, -// hlText.c_str(), lucene::document::Field::STORE_YES | lucene::document::Field::INDEX_NO)); -// } -// } + + CL_NS(document)::Document* document = hitDoc->doc; + + TCHAR* result = NULL; + Query* rwquery[2]; + searcher->getrewritten(hitDoc->id, query, rwquery); + + const TCHAR* firstlnHLtxt = document->get(LCPIX_HL_EXCERPT_FIELD); + + if(firstlnHLtxt && rwquery[1]) + { + CL_NS2(search,highlight)::QueryScorer hl_scorer(rwquery[1]); + + CL_NS2(search,highlight)::Highlighter highlighter(&hl_formatter, &hl_scorer); + + highlighter.setTextFragmenter(&hl_frag); + + wstring hlText; + + StringReader strreader(firstlnHLtxt); + + lucene::analysis::TokenStream * tokenStream = hl_analyzer.tokenStream(LCPIX_HL_EXCERPT_FIELD, &strreader); + + result = highlighter.getBestFragments(tokenStream, firstlnHLtxt, 2,L"..."); + + if (result != NULL && *((int*)result) != 0x00) + { + hlText.append(result); + + document->removeField( LCPIX_HL_EXCERPT_FIELD ); + + document->add(*_CLNEW Field(LCPIX_HL_EXCERPT_FIELD, + hlText.c_str(), lucene::document::Field::STORE_YES | lucene::document::Field::INDEX_NO)); + } + + } + + const TCHAR* text = document->get(LCPIX_EXCERPT_FIELD); + + if(text && rwquery[1]) + { + CL_NS2(search,highlight)::QueryScorer hl_scorer(rwquery[1]); + + CL_NS2(search,highlight)::Highlighter highlighter(&hl_formatter, &hl_scorer); + + highlighter.setTextFragmenter(&hl_frag); + + wstring hlText; + + StringReader strreader(text); + + lucene::analysis::TokenStream * tokenStream = hl_analyzer.tokenStream(LCPIX_EXCERPT_FIELD, &strreader); + + result = highlighter.getBestFragments(tokenStream, text, 2,L"..."); + + if (result != NULL && *((int*)result) != 0x00) + { + hlText.append(result); + + document->removeField( LCPIX_EXCERPT_FIELD ); + + document->add(*_CLNEW Field(LCPIX_EXCERPT_FIELD, + hlText.c_str(), lucene::document::Field::STORE_YES | lucene::document::Field::INDEX_NO)); + } + } //#endif }