2007/1/25, Magnus Bergman &lt;<a href="mailto:magnus.bergman@observer.net">magnus.bergman@observer.net</a>&gt;:<div><span class="gmail_quote"></span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
On Thu, 25 Jan 2007 09:44:53 +0100<br>&quot;Mikkel Kamstrup Erlandsen&quot; &lt;<a href="mailto:mikkel.kamstrup@gmail.com">mikkel.kamstrup@gmail.com</a>&gt; wrote:<br><br>&gt; 2007/1/24, Magnus Bergman &lt;<a href="mailto:magnus.bergman@observer.net">
magnus.bergman@observer.net</a>&gt;:<br>&gt; &gt;<br>&gt; &gt; On Sun, 21 Jan 2007 01:41:47 +0100<br>&gt; &gt; &quot;Mikkel Kamstrup Erlandsen&quot; &lt;<a href="mailto:mikkel.kamstrup@gmail.com">mikkel.kamstrup@gmail.com
</a>&gt; wrote:<br>&gt; &gt;<br>&gt; &gt; &gt; Here&#39;s an actual proposal for unifying the simple and live apis.<br>&gt; &gt; &gt; I&#39;m not saying that we really really should do this, just that it<br>&gt; &gt; &gt; is doable, and it still allows for quite simple use cases (see
<br>&gt; &gt; &gt; below). It is actually very much in spirit with Magnus&#39; very<br>&gt; &gt; &gt; first proposal a while back. Praise late insight :-)<br>&gt; &gt; &gt;<br>&gt; &gt; &gt; == Unified API Proposal ==<br>
&gt; &gt; &gt;<br>&gt; &gt; &gt; NewSession (out s session)<br>&gt; &gt; &gt;&nbsp;&nbsp;*<br>&gt; &gt; &gt;<br>&gt; &gt; &gt; SetProperty (in s session, in s prop, in s val)<br>&gt; &gt; &gt;&nbsp;&nbsp;* Set a property on the session. Prominent ones are
<br>&gt; &gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;- live : whether or not to be in live mode. Default false.<br>&gt; &gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;- hit.properties : semi colon separated list of field names.<br>&gt; &gt; &gt; Default &quot;uri&quot;.<br>&gt; &gt;<br>
&gt; &gt; Does the (potentially) expensive properties need to be included in<br>&gt; &gt; hit.properties, or are they considered special?<br>&gt;<br>&gt;<br>&gt;<br>&gt; In the updated proposal the expensive properties are requested via the
<br>&gt; GetHitData method. Here you don&#39;t have to list the desired properties<br>&gt; in hit.properties.<br><br>OK. You mentioned cases there it can be relevant for the search engine<br>to know which hit properties will be requested before the search starts
<br>(which is the reason why they are set with hit.properties). Isn&#39;t it<br>possible that the same goes for the expensive properties (that less<br>resources could be used it was known in advance that the expensive<br>
property would never be requested)? (Not that I care much of this<br>detail, I just thought I should mention in.)</blockquote><div><br><br>Yeah, we could include a &quot;hit.properties.extended&quot; property which was not included in the result set, but was a hint/warning to the search engine about the client being likely to request these attributes via GetHitData. I don&#39;t think it should be mandatory though, just an optional hint.
<br>&nbsp;</div><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">&gt; &gt;<br>&gt; &gt; &gt; GetProperty (in s session, in s prop)<br>&gt; &gt; &gt;&nbsp;&nbsp;*
<br>&gt; &gt; &gt;<br>&gt; &gt; &gt; CloseSession (in s session)<br>&gt; &gt; &gt;&nbsp;&nbsp;* Close the session and all child searches<br>&gt; &gt; &gt;<br>&gt; &gt; &gt; Search (in s session, in s query_xml, out s search)<br>&gt; &gt; &gt;&nbsp;&nbsp;* Start a new search from a query
<br>&gt; &gt; &gt;<br>&gt; &gt; &gt; CountHits (in s search, out i count)<br>&gt; &gt; &gt;&nbsp;&nbsp;* Returns the current number of found hits. If live=false this<br>&gt; &gt; &gt; call blocks until the index has been fully searched.
<br>&gt; &gt; &gt;<br>&gt; &gt; &gt; GetHits (in s search, in i num, out aav hits)<br>&gt; &gt; &gt;&nbsp;&nbsp;* Return num hits. If live=false this call blocks until there is<br>&gt; &gt; &gt; num hits available or the index has been fully searched.
<br>&gt; &gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;The client should keep track of each hit&#39;s serial number if it<br>&gt; &gt; &gt; want to use GetHitData later.<br>&gt; &gt; &gt;<br>&gt; &gt; &gt; GetHitData (in s search, in ai hit_ids, in as properties, out aav
<br>&gt; &gt; &gt; hit_data)<br>&gt; &gt; &gt;&nbsp;&nbsp;* Get hit metadata. Intended for snippets or modified hits.<br>&gt; &gt; &gt; hit_ids are serial numbers as obtained from GetHits.<br>&gt; &gt;<br>&gt; &gt; The GetHits/GetsHitsData functions was a quite elegant solution, I
<br>&gt; &gt; must say. But one thing isn&#39;t clear to me. Can any property be<br>&gt; &gt; requested with GetHitsData (restarting the search if needed)? Or<br>&gt; &gt; just those that are included in hit.properties? Or perhaps those
<br>&gt; &gt; that are either expensive *or* included in hit.properties?<br>&gt;<br>&gt;<br>&gt; Any property can be requested via GetHitData. That was the idea at<br>&gt; least. I documented this on<br>&gt; <a href="http://wiki.freedesktop.org/wiki/WasabiSearchLive">
http://wiki.freedesktop.org/wiki/WasabiSearchLive</a> now.<br>&gt;<br>&gt; Perhaps the &quot;current hit_id&quot; (the implicit offset used in GetHits)<br>&gt; could<br>&gt; &gt; be a property of the search?<br>&gt;<br>&gt;
<br>&gt; Well, then the Search object/handle would need properties anyway.<br>&gt; Would it not be easier to put such counting functionality in a<br>&gt; language/platform binding? It can easily be calculated by the client
<br>&gt; anyway.<br><br>Yes, this is also just a small detail. If it&#39;s considered needed it can<br>easily be added later anyway.<br><br>&gt; &gt; &gt; CloseSearch (in s search)<br>&gt; &gt; &gt;&nbsp;&nbsp;* Close and free a search.
<br>&gt; &gt; &gt;<br>&gt; &gt; &gt; SIGNAL HitsAdded (in i count)<br>&gt; &gt; &gt; SIGNAL HitsRemoved (in ai hit_ids)<br>&gt; &gt; &gt; SIGNAL HitsModified (in ai hit_ids)<br>&gt; &gt;<br>&gt; &gt; All in all I&#39;m very happy with this proposal.
<br>&gt; &gt;<br>&gt;<br>&gt; Ok, good. I updated the live proposal with most of your feedback.<br><br>Another thing I thought of: The search function of the simple API<br>(possibly) took a &quot;simple end user QL&quot; string instead of XML. Has this
<br>idea been dropped or just forgotten? Personally I&#39;m in favor of<br>dropping it and create XML from &quot;simple end user QL&quot; on the client<br>side, possibly using a library.<br></blockquote></div><br><br>The xml language proposed at 
<a href="http://wiki.freedesktop.org/wiki/WasabiQueryLanguage">http://wiki.freedesktop.org/wiki/WasabiQueryLanguage</a> allows for embedding of user queries. Here&#39;s a copy-paste of the example from the page:<br><br><pre>
&lt;request&gt;<br>  &lt;userQuery&gt;<br>    type:music hendrix<br>  &lt;/userQuery&gt;<br>&lt;/request&gt;</pre><br>I think this should be enough. It would be trivial for language bindings to provide a helper method UserSearch(&quot;type:music hendrix&quot;) wrapping the string in the appropriate xml,
<br><br><br>Cheers,<br>Mikkel<br>