/// Executes the query. // Preprocesses the query text entered by the user // and queries the index. // Calculates the total time to run the query // and sets some text variables for later use. public int RunQuery(string text, bool preproc, out string qText) { // start timer... DateTime start = DateTime.Now; // get the query settings from the collection IRQueryParams queryParams = myCollection.GetQueryParams(); string[] queryFields = queryParams.Fields; float[] queryFieldBoosts = queryParams.FieldBoosts; // build field boost dictionary IDictionary <string, float> boosts = new Dictionary <string, float>(); for (int i = 0; i < queryFields.Length; i++) { boosts.Add(queryFields[i], queryFieldBoosts[i]); } // setup searcher, query and parser CreateSearcher(); Query query; parser = new MultiFieldQueryParser(Lucene.Net.Util.Version.LUCENE_30, queryFields, analyzer, boosts); // preprocess query (if required) if (preproc == true) { query = PreprocessQuery(text, parser); } else { // no preprocessing query = parser.Parse(text); } // print query text to form qText = query.ToString(); // execute the search searchResults = searcher.Search(query, maxResults); // end timer and calculate total time DateTime end = DateTime.Now; TimeSpan duration = end - start; queryTime = duration.Seconds + (float)duration.Milliseconds / 1000; CleanUpSearcher(); return(searchResults.TotalHits); }
// set the query parameters for this IRDocument type public override IRQueryParams GetQueryParams() { string[] fields = { "title", "words" }; float[] fieldBoost = { 1.0f, 1.0f }; bool removeStopWords = false; int nGrams = 3; float nGramBoost = 0.2f; bool addSynonyms = false; float synonymBoost = 0.5f; IRQueryParams querySettings = new IRQueryParams(fields, fieldBoost, removeStopWords, nGrams, nGramBoost, addSynonyms, synonymBoost); return(querySettings); }