c# 4.0 - Relevance the search result in Lucene -
what want :
in search method add parameter relevance param of type float setup cuttoff relevance. lets if cutoff 60% want items higher 60% relevance.
here current code of search :
say search text , in lucene file system have following description: 1) abcdef 2)abc 3)abcd
for fetch above 3 docuements , want fetch are higher 60% relevance.
//for not using relevanceparam anywhere in method :
public static string[] search(string searchtext,float relevanceparam) { //list of id list<string> searchresultid = new list<string>(); indexsearcher searcher = new indexsearcher(reader); term searchterm = new term("text", searchtext); query query = new termquery(searchterm); hits hits = searcher.search(query); (int = 0; < hits.length(); i++) { float r = hits.score(i); document doc = hits.doc(i); searchresultid.add(doc.get("id")); } return searchresultid.toarray(); }
edit :
what if set boost query : query.setboost(1.6);-- equivalent 60 percent?
you can ignore hits have less topdocs.maxscore * minrelativerelevance
minrelativerelevance
should value between 0 , 1.
i've modified code match 3.0.3 release of lucene.net, , added fieldselector call indexsearcher.doc
avoid loading non-required fields.
calling query.setboost(1.6)
mean score calculated query boosted 60% (multiplied 1.6). may change ordering of result if there other queries involved (in booleanquery, example), wont change results returned.
public static string[] search(indexreader reader, string searchtext, single minrelativerelevance) { var resultids = new list<string>(); var searcher = new indexsearcher(reader); var searchterm = new term("text", searchtext); var query = new termquery(searchterm); var hits = searcher.search(query, 100); var minscore = hits.maxscore * minrelativerelevance; var fieldselector = new mapfieldselector("id"); foreach (var hit in hits.scoredocs) { if (hit.score >= minscore) { var document = searcher.doc(hit.doc, fieldselector); var hitid = document.get("id"); resultids.add(hitid); } } return resultids.toarray(); }
Comments
Post a Comment