You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-user@lucene.apache.org by "Daniel J. Williams" <da...@agentlogic.com> on 2006/09/01 01:12:25 UTC
highlight using a MemoryIndex
I was able to get the following code to work using a RAMDirectory, but after reading the description of the MemoryIndex, I wanted to try to use it instead for speed reasons. I removed the RAMDir code, and replaced the references with the MemoryIndex, and all seems to go well till I start stepping through the hits. 1 hit is found, but the String returned from the "hits.doc(i).get(FIELD_NAME);" call is always null. Any ideas where I went wrong?
Thank you,
Dan Williams
public String findAndWrap( String queryString, String value)
{
// System.out.println( "Methods output = [" + Methods.containsBoolean(queryString, value) + "]");
String returnString = null;
try {
// store the string to search
MemoryIndex index = new MemoryIndex();
index.addField(FIELD_NAME, value, new StandardAnalyzer());
/* RAMDir method
RAMDirectory ramDir = new RAMDirectory();
IndexWriter writer = new IndexWriter(ramDir, new StandardAnalyzer(), true);
addDoc(writer, value);
writer.optimize();
writer.close();
IndexReader reader = IndexReader.open(ramDir);
*/
// setup the queryString
QueryParser parser=new QueryParser(FIELD_NAME, new StandardAnalyzer());
Query unReWrittenQuery = parser.parse(queryString);
System.out.println("UnRewritten Query: [" + unReWrittenQuery.toString(FIELD_NAME) + "]");
System.out.println("score = " + index.search(unReWrittenQuery));
IndexSearcher searcher = index.createSearcher();
/* IndexSearcher searcher = new IndexSearcher(ramDir);*/
System.out.println("Searcher = " + searcher.toString());
IndexReader reader = searcher.getIndexReader();
Query query = unReWrittenQuery.rewrite(reader);
System.out.println("Searching for: " + query.toString(FIELD_NAME));
Hits hits = searcher.search(query);
System.out.println("Number of Hits = [" + hits.length() + "]");
if( hits.length() > 0)
{
Highlighter highlighter =new Highlighter(this,new QueryScorer(query));
highlighter.setTextFragmenter(new NullFragmenter());
for (int i = 0; i < hits.length(); i++)
{
String text = hits.doc(i).get(FIELD_NAME);
int maxNumFragmentsRequired = 2;
String fragmentSeparator = "...";
StandardAnalyzer analyzer2 = new StandardAnalyzer();
TokenStream tokenStream=analyzer2.tokenStream(FIELD_NAME,new StringReader(text));
returnString =
highlighter.getBestFragments(
tokenStream,
text,
maxNumFragmentsRequired,
fragmentSeparator);
}
}
else
{
System.out.println("No Matches found to highlight.");
returnString = value;
}
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return returnString;
}
public static void main(String[] args) {
StringBuffer contents = new StringBuffer();
contents.append("bob\n");
contents.append("\n");
contents.append("bobberson\n");
contents.append("\n");
contents.append("test\n");
contents.append("\n");
contents.append("\n");
contents.append("\n");
contents.append("\n");
contents.append("dated this is also a test sentence\n");
contents.append("\n");
contents.append("Dated:7/24/2006\n");
contents.append("\n");
contents.append("#Dated: 7/24/2006\n");
contents.append("\n");
contents.append("asdf asdfas dfasdfDateda sdfasdfa sdfasd fasdf: 7/24/2006\n");
String queryString1 = "(+test +Dated*)";
String queryString2 = "sdfasd and !ted";
String queryString3 = "test";
modularHtmlHighlighter hl = new modularHtmlHighlighter();
System.out.println("string 1");
System.out.println( hl.findAndWrap(queryString1, contents.toString()) );
System.out.println("string 2");
System.out.println( hl.findAndWrap(queryString2, contents.toString()) );
System.out.println("string 3");
System.out.println( hl.findAndWrap(queryString3, contents.toString()) );
}
CONFIDENTIALITY NOTICE: This e-mail (including attachments) may contain information that is proprietary or confidential. If you are not the intended recipient or a person responsible for its delivery to the intended recipient, do not copy or distribute it. Please permanently delete the e-mail and any attachments, and notify us immediately at (703) 387-2400 x23.