2007/1/11, Joe Shaw &lt;<a href="mailto:joeshaw@novell.com">joeshaw@novell.com</a>&gt;:<br>&gt; Hi,<br>&gt; <br>&gt; On Thu, 2007-01-11 at 11:48 +0100, Mikkel Kamstrup Erlandsen wrote:<br>&gt; &gt; Query (in s query_string, in as requested_properties, out s query_handle)
<br>&gt; <br>&gt; Is the idea here that the query will actually be run when Query is<br>&gt; called, or is there just some server-side preparation for it?<br><br>Just to be clear - we&#39;re talking about the simple api, not the live one...
<br><br>It can be both. If the server wants it can start the query right away, or it can be &quot;sloppy&quot; where the actual query is only executed on the GetHitProperties call. The only thing that is returned is a query_handle.
<br><br>&gt; If the query is actually run, that means the server has to keep all<br>&gt; information about all the hits in memory until the query handle is<br>&gt; somehow released.&nbsp;&nbsp;(An API call which I think is missing.)
<br><br>Hmmm, there could be an api call for releasing the query. An alternative solution could be to have a session object like in the live interface. Issuing a new query with the SimpleSession object invalidates the previous query. The session would probably need a .close() method or something (like the live api).
<br><br>A sane timeout could also be settled upon. For this simple api where queries invalidate quickly could possible allow for quite low timeouts. It would not be possible to call GetHitProperties on a timed out handle.
<br><br>&gt; My Beagle index contains over 1 million documents, obviously this could<br>&gt; quite easily get out of hand with a bunch of queries running.<br>&gt; <br>&gt; It not, and the query is only run on demand,<br><br>
Well in the live api there is a Query.Start(), but I think the current simple api doesn&#39;t need it.<br><br>&gt; &gt; CountHits (in s query_handle, out i count)<br>&gt; &gt;<br>&gt; &gt; GetHitProperties (in s query_handle, in i offset, in i limit, out
<br>&gt; &gt; a{sa{sas}} response )<br>&gt; <br>&gt; Then these calls would be racy, because the index could change between<br>&gt; calls.&nbsp;&nbsp;I believe you want the query to run on demand, however, because<br>&gt; of the limit passed in.
<br><br>The simple api is racy in its very nature as far as I can see. Admittedly I haven&#39;t given great thought to this, but I don&#39;t think there exists an elegant non-racy solution (for the simple case).<br><br>&gt; Could you define what the a{sa{sas}} map is?
<br><br>Sure. It is a map from hit_identifiers to maps of property-value_list. Fx:<br><br>{<br><br>&nbsp; hit_id_1 {<br>&nbsp;&nbsp;&nbsp;&nbsp;&quot;group&quot; : [&quot;email&quot;]<br>&nbsp;&nbsp;&nbsp;&nbsp;&quot;message.title&quot; : [&quot;How are you these days?&quot;]
<br>&nbsp;&nbsp;&nbsp;&nbsp;&quot;uri&quot; : [&quot;email://blah/foobar&quot;]<br>&nbsp;&nbsp;&nbsp;&nbsp;&quot;message.cc&quot; : [&quot;<a href="mailto:mommy@unitedmoms.com">mommy@unitedmoms.com</a>&quot;, &quot;<a href="mailto:daddy@whithouse.gov">daddy@whithouse.gov
</a>&quot;]<br>&nbsp;&nbsp;&nbsp; &quot;keywords&quot; : []<br>&nbsp; }<br><br>&nbsp; hit_id_2 {<br>&nbsp;&nbsp;&nbsp;&nbsp;&quot;group&quot; : [&quot;email&quot;]<br>&nbsp;&nbsp;&nbsp;&nbsp;&quot;message.title&quot; : [&quot;The indian says HOW!&quot;]<br>&nbsp;&nbsp;&nbsp;&nbsp;&quot;uri&quot; : [&quot;email://blah/foobaz&quot;]
<br>&nbsp;&nbsp;&nbsp;&nbsp;&quot;message.cc&quot; : []<br>&nbsp;&nbsp;&nbsp; &quot;keywords&quot; : [&quot;indians&quot;, &quot;culture&quot;, &quot;lasers&quot;]<br>&nbsp;&nbsp;}<br><br>}<br><br>There could be included some properties for scoring/sorting purposes too.
<br><br>&gt; <br>&gt; I think you probably also want an API where you just get a list of URIs;<br>&gt; sometimes that&#39;s all you care about.&nbsp;&nbsp;(This is a weakness in the Beagle<br>&gt; API, and one which we&#39;re going to be fixing.)
<br><br>Initially it was proposed that we used uris for hit_identifiers. We dropped this idea in favor of opaque hit handles. Magnus suggested integers and I suggest string.&nbsp; I don&#39;t think uris are good as identifier if you want me to elaborate then ask.
<br><br>I realise that you are not necessarily suggesting to use uris as hit_ids. While I think it is actually quite easy to get a list of uris with the current proposal, I am more than willing to meet a demand for even easier uri retrieval. Currently you have to do:
<br><br>query_handle = Query (query_string)<br>uris = GetHitProperties (query_handle, 0, 100, [&quot;uri&quot;])<br><br>with my recent proposal it would be this instead:<br><br>query_handle = Query (query_string, [&quot;uri&quot;])
<br>
uris = GetHitProperties (query_handle, 0, 100)<br>
<br>can it get any simpler?<br><br>&gt; <br>&gt; &gt; GetSnippets (in s query_handle, in as hit_handles)<br>&gt; &gt;<br>&gt; &gt; here hit_handles (in GetSnippets) is a list of keys from the a{sa{sas}} map.<br>&gt; <br>
&gt; We would probably just use the URI as the key; the rename race is no<br>&gt; worse than the removal race.<br>&gt;<br><br>Well. That&#39;s true. However with uris you have both races. With ids you have only removal race.
<br><br>Cheers,<br>Mikkel<br>