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

Popular posts from this blog

c# - SharpSVN - How to get the previous revision? -

c++ - Is it possible to compile a VST on linux? -

url - Querystring manipulation of email Address in PHP -