Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>What I do is iterate through the hits and insert them into a temporary table in the db. Then I can run a regular SQL query - joining that temp table with other tables too - and give the grid the DataSet/DataView that it wants.</p> <p>Note that I do the inserts and the query in ONE TRIP to the db, because I'm using just one SQL batch. </p> <pre><code>void Page_Load(Object sender, EventArgs e) { dbutil = new DbUtil(); security = new Security(); security.check_security(dbutil, HttpContext.Current, Security.ANY_USER_OK); Lucene.Net.Search.Query query = null; try { if (string.IsNullOrEmpty(Request["query"])) { throw new Exception("You forgot to enter something to search for..."); } query = MyLucene.parser.Parse(Request["query"]); } catch (Exception e3) { display_exception(e3); } Lucene.Net.Highlight.QueryScorer scorer = new Lucene.Net.Highlight.QueryScorer(query); Lucene.Net.Highlight.Highlighter highlighter = new Lucene.Net.Highlight.Highlighter(MyLucene.formatter, scorer); highlighter.SetTextFragmenter(MyLucene.fragmenter); // new Lucene.Net.Highlight.SimpleFragmenter(400)); StringBuilder sb = new StringBuilder(); string guid = Guid.NewGuid().ToString().Replace("-", ""); Dictionary&lt;string, int&gt; dict_already_seen_ids = new Dictionary&lt;string, int&gt;(); sb.Append(@" create table #$GUID ( temp_bg_id int, temp_bp_id int, temp_score float, temp_text nvarchar(3000) ) "); lock (MyLucene.my_lock) { Lucene.Net.Search.Hits hits = null; try { hits = MyLucene.search(query); } catch (Exception e2) { display_exception(e2); } // insert the search results into a temp table which we will join with what's in the database for (int i = 0; i &lt; hits.Length(); i++) { if (dict_already_seen_ids.Count &lt; 100) { Lucene.Net.Documents.Document doc = hits.Doc(i); string bg_id = doc.Get("bg_id"); if (!dict_already_seen_ids.ContainsKey(bg_id)) { dict_already_seen_ids[bg_id] = 1; sb.Append("insert into #"); sb.Append(guid); sb.Append(" values("); sb.Append(bg_id); sb.Append(","); sb.Append(doc.Get("bp_id")); sb.Append(","); //sb.Append(Convert.ToString((hits.Score(i)))); sb.Append(Convert.ToString((hits.Score(i))).Replace(",", ".")); // Somebody said this fixes a bug. Localization issue? sb.Append(",N'"); string raw_text = Server.HtmlEncode(doc.Get("raw_text")); Lucene.Net.Analysis.TokenStream stream = MyLucene.anal.TokenStream("", new System.IO.StringReader(raw_text)); string highlighted_text = highlighter.GetBestFragments(stream, raw_text, 1, "...").Replace("'", "''"); if (highlighted_text == "") // someties the highlighter fails to emit text... { highlighted_text = raw_text.Replace("'","''"); } if (highlighted_text.Length &gt; 3000) { highlighted_text = highlighted_text.Substring(0,3000); } sb.Append(highlighted_text); sb.Append("'"); sb.Append(")\n"); } } else { break; } } //searcher.Close(); } </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload