2007/6/23, Arun Raghavan &lt;<a href="mailto:arunisgod@gmail.com">arunisgod@gmail.com</a>&gt;:<br>&gt; Hello,<br>&gt; <br>&gt; On 6/23/07, Mikkel Kamstrup Erlandsen &lt;<a href="mailto:mikkel.kamstrup@gmail.com">mikkel.kamstrup@gmail.com
</a>&gt; wrote:<br>&gt; &gt; 2007/6/22, Jos van den Oever &lt;<a href="mailto:jvdoever@gmail.com">jvdoever@gmail.com</a>&gt;:<br>&gt; &gt; &gt; As you can see, the time stays about constant until the query becomes<br>&gt; &gt; &gt; longer than 1000 characters. At 3000 characters we see 10% loss in
<br>&gt; &gt; &gt; speed. 3000 characters of query is huge. Still only at about 20.000<br>&gt; &gt; &gt; characters does the dbus performance halve. Using StartQuery() always<br>&gt; &gt; &gt; halves the dbus performance!
<br>&gt; &gt; &gt;<br>&gt; &gt; &gt; Using the query as key is a bit slower for huge queries. It takes a<br>&gt; &gt; &gt; bit more memory on the server, but in general it will be faster and<br>&gt; &gt; &gt; most importantly will be simpler for the user.
<br>&gt; &gt; &gt;<br>&gt; &gt; &gt; It&#39;s unintuitive for us hackers to do this in such a simple way,<br>&gt; &gt; &gt; because it feels like wasting resources. But in fact this is the most<br>&gt; &gt; &gt; efficient solution.
<br>&gt; &lt;snip&gt;<br>&gt; <br>&gt; The memory impact will probably not be significant -- just one copy of<br>&gt; the query. The server will probably just have a map of the (string<br>&gt; searchId, SearchObject obj) (well, mine does at any rate), and in most
<br>&gt; implementations the map will just use a hash of the string searchId<br>&gt; key.<br>&gt; <br>&gt; However, as you say, using the query string does not &quot;feel right&quot;. The<br>&gt; cost of using StartSearch() might be double that of not, but from your
<br>&gt; numbers it looks like we&#39;ll be moving from O(0.3 ms) to O(0.6 ms).<br>&gt; Perhaps that might be an acceptable tradeoff?<br>&gt; <br>&gt; A not so great alternative might be to just use a hash of the query as
<br>&gt; the searchId (potentially introducing a dependency on some library to<br>&gt; provide a MD5/SHA1 implementation).<br>&gt; <br>&gt; &lt;snip&gt;<br>&gt; &gt; Historical Note:<br>&gt; &gt; Using the query string as search handle was in fact one of the first
<br>&gt; &gt; proposals for the xesam search spec. I think we better dig out why it<br>&gt; &gt; was rejected then...<br>&gt; <br>&gt; Some digging turned up this --<br>&gt; <a href="http://article.gmane.org/gmane.comp.freedesktop.xdg/8016">
http://article.gmane.org/gmane.comp.freedesktop.xdg/8016</a>. I dug a<br>&gt; little further back too, but that looked too preliminary to cover<br>&gt; this.<br><br>Thanks for the link. For the lazy among us let me quote Magnus Bergman:
<br><br><blockquote style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;" class="gmail_quote">I think it&#39;s a bad idea to use a query-string to identify a search for<br>&nbsp;&nbsp;the following reasons:
<br>&nbsp;&nbsp;* It is inefficient to sent a (possibly quite long) string for every<br>&nbsp;&nbsp;&nbsp;&nbsp;call.<br>&nbsp;&nbsp;* It isn&#39;t logical for the search engine to use the query string to<br>&nbsp;&nbsp;&nbsp;&nbsp;lookup the search because a query might generate a different result
<br>&nbsp;&nbsp;&nbsp;&nbsp;depending on then the search is started.<br>&nbsp;&nbsp;* An application might create different searches from the same query<br>&nbsp;&nbsp;&nbsp;&nbsp;(string) with different result (&quot;all files created this minute&quot;).</blockquote><div>
<br>I 100% agree with Magus here, and I think these points demonstrate that we cannot use the query-string as search handle. Even (session,query_string) cannot be used as key based on these arguments. <br></div><br><br>Let me elaborate a bit on Magnus&#39; point 1.
<br><br>We have to send the whole wuery string for each and every interaction with the search engine. These are NewSearch, CountHits, GetHits, GetHitData, CloseSearch. If you create a context-analyzer-daemon which constantly queries the search engine based on user behavior - possibly analyzing *the whole* hit set, the query string can be significant overhead.
<br><br>Cheers,<br>Mikkel<br>