2006/11/24, 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, 23 Nov 2006 16:26:31 +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; 2006/11/22, Magnus Bergman &lt;<a href="mailto:magnus.bergman@observer.net">
magnus.bergman@observer.net</a>&gt;:<br>&gt;<br>&gt; &gt; I have constructed a in-house application which does pretty much<br>&gt; &gt; exactly what you describe (it doesn't yet speak dbus, but corba and<br>&gt; &gt; soap). Sadly I'm not allowed to release the source of this
<br>&gt; &gt; application, but at least I can share some of my experience. (I<br>&gt; &gt; haven't yet looked closely on your source, so I might have<br>&gt; &gt; misunderstood some things)<br>&gt;<br>&gt;<br>&gt; Great! To paraphrase Linus &quot;Given enough eyeballs all
<br>&gt; &lt;strike&gt;bugs&lt;/strike&gt; specs are shallow&quot;&nbsp;&nbsp;:-)<br>&gt;<br>&gt;<br>&gt; If several search engines are available, the search manager lets the<br>&gt; &gt; client know of each search engine according to your proposal
<br>&gt; &gt; (right?). I think it would be a better idea to present a list of<br>&gt; &gt; indexes (of which each search engine might provide several) to<br>&gt; &gt; search in, but by default search in all of them (if appropriate). I
<br>&gt;<br>&gt; Well, the search engines are not obliged to use a particular index<br>&gt; format. The indexes them selves can be of any format.<br><br>With &quot;index&quot; I mean an abstract reference to something considered an
<br>index by the backend. With the consequence that the user (or rather the<br>application) only sees the indexes, not the engines that provides them<br>(because that is not very important).</blockquote><div><br><br>Ok,&nbsp; I'm with you now :-) It is&nbsp; the same as the &quot;group&quot; switch of the current draft on the wiki. Fx. searching for &quot;magnus group:contacts&quot; searches only through the contacts &quot;index&quot;. I'm very strongly in favor of this, although some have spoken for putting this &quot;grouping&quot; functionality on the client side. An example of client side grouping could be a music application, where searching for &quot;foo fighters&quot; would add &quot;mime:audio/*&quot; to the query before sending it. As I said I'm not for client side grouping, a server side grouping could still facilitate a client side grouping anyway.
<br></div><br><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; Instead of registering the the<br>&gt; &gt; search engine I think it's better to think in terms of creating a
<br>&gt; &gt; session (which might still do exactly the same thing). Because this<br>&gt; &gt; should affect all appropriate search engines transparently. And<br>&gt; &gt; because it might be desired to alter some options for the session
<br>&gt; &gt; (language, fussiness, search contexts and such).<br>&gt;<br>&gt; So you have a search-manager-daemon or something that holds a session<br>&gt; object with user info; do I understand correctly?<br><br>It is handled by a library, which can be used by a daemon. So you have
<br>a choice if you want to use the library directly or talk to the daemon.<br><br>&gt; &gt; In addition to this session object I have found it suitable to also<br>&gt; &gt; have a search object (created from a query) because applications
<br>&gt; &gt; might construct very complicated queries. This object can then is<br>&gt; &gt; passed to countHits, and used for getting the hits. And also for<br>&gt; &gt; getting attributes of the hit (matching document, score, language
<br>&gt; &gt; and such). (Note that a hit is not equivalent to a document.)<br>&gt;<br>&gt; The problem with creating query objects like this, is that we are<br>&gt; creating a dbus api. Essentially you only have simple data types at
<br>&gt; your hand. No objects - especially objects with methods on them :-)<br>&gt; It would be possible to create a helper lib in &lt;insert favorite<br>&gt; language + toolkit&gt; to construct queries conforming to the wasabi
<br>&gt; spec, but this would require separate libs for gobject and qt. While<br>&gt; this is by no means ruled out, I think we better focus on the &quot;bare&quot;<br>&gt; dbus api for now.<br><br>I must admit that I have no experience of the dbus API. But it has to
<br>be possible to get some type of session handle (perhaps a unique number)<br>back, right? Perhaps I'm confusing then using the word &quot;object&quot;, but<br>for me it's more a way of thinking, not about using object oriented
<br>languages (I'm using plain C then dealing with my &quot;objects&quot; anyway).<br><br>What's this wasabi spec? Could you please direct me to it?<br><br>&gt; &gt; Daemon or no daemon, that is the question. This is a question that
<br>&gt; &gt; without doubt will arise (it always does). First we need to clarify<br>&gt; &gt; that there is a difference between a daemon doing the indexing of<br>&gt; &gt; document (or rather detecting new documents needed to be indexed)
<br>&gt; &gt; and a daemon performing the search (and possibly merging several<br>&gt; &gt; searches). Most search engines I use don't have a daemon for doing<br>&gt; &gt; the searches (instead the only provide a library), because that is
<br>&gt; &gt; seldom considered required. Indexes are read only (then searching)<br>&gt; &gt; so the common problems daemons are used to solve are not present.<br>&gt;<br>&gt; The situation at hand is that we have a&nbsp;&nbsp;handful of desktop search
<br>&gt; engines, all implemented as daemons, both handling searches and<br>&gt; indexing. Having an extra daemon on top of that handling the query<br>&gt; one extra time before passing it to the search subsystem seems<br>
&gt; overkill... Ideally I see the daemon/lib (or even executable) to only<br>&gt; be used as a means of obtaining a dbus object path given a dbus<br>&gt; interface name (&quot;org.freedesktop.search.simple&quot;).<br><br>
I have some experience of search engines in general (and I have no idea<br>in what way a &quot;desktop search engine&quot; is different). And to my<br>knowledge the majority does not have a daemon performing the searches,
<br>rather a library. They might have a daemon doing the indexing (and<br>detecting new documents), but that's not the same thing.</blockquote><div><br><br>Well, having a lib with no daemon associated used for searching is possible, there's still response time&nbsp; to consider. I don't know about other indexers but I would hate to create a new Lucene IndexSearcher for each app that want to do searches, this is a costly affair timewise and memorywise. A daemon holding a singleton IndexSearcher (or managed pool) can be more resource friendly here.
<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;">Has anyone thought about having a general purpose naming service based<br>on dbus and avahi (like CORBAs CosNaming)? Or is there already something
<br>like that, that I have missed?</blockquote><div><br><br>I believe you are asking about dbus activation? <a href="http://raphael.slinckx.net/blog/documents/dbus-tutorial/">http://raphael.slinckx.net/blog/documents/dbus-tutorial/
</a><br>I don't know what CosNaming is about...<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; As you point out, having a separate daemon other than the indexer, is
<br>&gt; not exactly standard (atleast not to my knowledge). Also a managing<br>&gt; daemon is likely to re-invent functionality dbus already provides<br>&gt; IMHO.<br><br>That might very well be the case. As I mentioned I have thou
<br>implemented a (in-house) daemon doing this. But it's usage is mainly to<br>cache searched made through a web-interface (which has to be stateless<br>since there are several web-servers sharing the load).<br><br>But is your idea not to use dbus at all then (except for finding the
<br>search services), but a library instead?</blockquote><div><br><br>The idea is to have the indexer/search engine expose the wasabi api over dbus.<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; My solution (which took me quite a while to develop) might seem<br>&gt; &gt; overly complicated at first, but I think it really isn't. It was to<br>&gt; &gt; implement all functionality (including caching and merging of
<br>&gt; &gt; searches) in a library. That library can be used by an application<br>&gt; &gt; to do everything. Or the application can use it just to contact a<br>&gt; &gt; daemon (which of course also uses the very same library for
<br>&gt; &gt; everything it does). This also has the nice side effect that<br>&gt; &gt; daemons can be chained, so searches can span over several computers<br>&gt; &gt; (if it supports at least one network transparent communication
<br>&gt; &gt; mechanism). I think it would also be a good idea for the library to<br>&gt; &gt; support plugins for different search engines/communication<br>&gt; &gt; mechanisms.<br>&gt;<br>&gt; This is exactly what Wasabi aims to fix. Standardize&nbsp;&nbsp;apis across
<br>&gt; search engine implementations. What functionality should be on top of<br>&gt; this - in form of helper libraries/daemons should probably be punted<br>&gt; for now (until the api spec is set in stone atleast).<br>
<br>I very much doubt that many search engines implementation will adapt to<br>such a standard. Or is the idea to only use the search engines that<br>does comply? I think that would be a waste, and possibly a problem in<br>
the long run. For example, I'm sure that the Russian search engines<br>are superior then it comes to Russian stemming, and that Japanese<br>search engines are better suited for Japanese users. Implementing<br>support for those might not be in top of the list right now, but I
<br>think it's important to keep an open design. The spell checker enchant<br>is a good example.<br><br>But sure, specifying an API is a good thing. And I'm sure the same spec<br>can easily be translated into a dbus interface (and perhaps a plugin
<br>API) as well.<br><br>&gt; &gt; One of the plugins is the one using the dbus search<br>&gt; &gt; interface. Other plugins could be made for existing search engines<br>&gt; &gt; like Lucene, Swish(++|E), mnoGoSearch, Xapian, ht://Dig, Datapark,
<br>&gt; &gt; (hyper)estraier, Glimpse, Namatzu, Sherlock Holmes and all the<br>&gt; &gt; other. Which would surely be a lot easier than convincing each of<br>&gt; &gt; them to implement a daemon which provides a dbus interface.
<br>&gt;<br>&gt; Well, what you are suggesting sounds like the opposite of the current<br>&gt; goal. If I understand right you suggest creating a wrapper lib for<br>&gt; each possible search backend, as opposed to the current idea - to
<br>&gt; promote a shared dbus interface. I see it this way: Dbus is the de<br>&gt; facto standard for desktop ipc. It is actually really easy (and<br>&gt; portable between toolkits) to expose a dbus api. Implementing a<br>
&gt; backend for each (custom) communications api sounds like a great deal<br>&gt; more work, with possibility for more bugs...<br><br>Yes, I'm suggesting a design that makes it possible to create a wrapper<br>lib for each possible search backend. But certainly not *opposed* to
<br>the current idea, rather *in addition* to it. If there is a possibility<br>to load plugins, the dbus communication can be done with one of them.<br>Other plugins doing things differently can exist in parallel (and<br>
doesn't have to be implemented right now either).</blockquote><div><br><br>I'm slowly begging to see the light. This will require a lot more code for Wasabi than I was hoping for though - however I do like the idea very much.
<br></div><br><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">&gt; It's only guesswork, but I will bet that is hard work maintaining a<br>
&gt; cross platform library doing all this. If we restricted to one<br>&gt; platform it would be another deal.<br><br>You mean a cross-platform library doing plugin-loading (other from that<br>I don't believe my suggestion is more complicated in any way). I think
<br>you're right that plugin loading is tricky to port to some platforms.<br>But I guess (or at least hope) that those issues are taken care of by<br>gmodule. I only have experience maintaining applications for linux,<br>
irix and solaris. And those systems are very similar.</blockquote><div><br><br>gmodule would make us depend on glib, which might very well pose a problem to the KDE/QT guys among us...&nbsp;  We could use libltdl which is a GNU portable dlopen wrapper that is pretty standard. See fx. 
<a href="http://www.delorie.com/gnu/docs/libtool/libtool_46.html">http://www.delorie.com/gnu/docs/libtool/libtool_46.html</a><br></div><br><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
&gt; One thing that English users seldom consider is the usages of several<br>&gt; &gt; languages. Which language is being used is important to know in<br>&gt; &gt; order to decide what stemming rules to use, and which stop-words
<br>&gt; &gt; use (in English &quot;the&quot; is a stop-word while it in Swedish means tea<br>&gt; &gt; and is something that is adequate to search for). People using<br>&gt; &gt; other languages are very often multi lingual (using English as
<br>&gt; &gt; well). Therefore it is interesting to know which language the query<br>&gt; &gt; is in (search engines might also be able to translate queries to<br>&gt; &gt; search in document written in different languages).
<br>&gt;<br>&gt; This is a good point. However I suggest leaving this up to the actual<br>&gt; implementations. After all it is an indexing time question what<br>&gt; stemmer to use when indexing a document...<br><br>Yes, absolutely. But for them to do their job they might need to know
<br>what language the query is supposed to be in. This might be supported in<br>the query language (or perhaps as an argument to the function creating<br>a search from the query).<br></blockquote></div><br><br>Well, I think the search engine could assume that the query was in the current locale unless explicitly told otherwise through some query option?
<br><br>Cheers,<br>Mikkel<br>