simple search api (was Re: mimetype standardisation by testsets)
Mikkel Kamstrup Erlandsen
mikkel.kamstrup at gmail.com
Tue Nov 28 20:11:35 EET 2006
2006/11/28, Joe Shaw <joeshaw at novell.com>:
>
> On Tue, 2006-11-28 at 07:15 +0100, Mikkel Kamstrup Erlandsen wrote:
> > I think everybody wants that (atleast I do). However the idea about
> > org.freedesktop.search.simple was to have a *simple* interface. Here
> > the simple only applies to the end user-app developers.
>
> Yeah, I can certainly appreciate that.
>
> > 1) Targetted at apps where searching is not the main functionality,
> > fx. a music browser, or filemanager.
> > 2) There should be no query building on the application end. Just
> > pass the string as entered by the user to quuery method.
> > 3) Should be dead easy to drop in your app with only a few lines of
> > code
>
> I agree in principle, but I disagree with point number #2 here. One
> reason is that it's generally not a good idea to programmatically build
> a string query. They can be error prone but more importantly they're
> just slow.
>
> Take a look at the Beagle backend in Nautilus:
>
> http://cvs.gnome.org/viewcvs/nautilus/libnautilus-private/nautilus-search-engine-beagle.c?annotate=1.2.2.1
>
>
> (roughly around line 180)
>
> The API is still very simple, but we set some important details on the
> query to limit its scope:
>
> * We only want files; no emails, IM logs, addressbook contacts,
> etc.
>
> * We want a maximum of 1000 hits.
>
> * Optionally, we may only want a set of certain MIME types.
>
> And we also obviously set the string the user typed in, which is
> actually a query language string, so they can add more advanced
> properties, like 'author:"Charles Dickens"'.
I think I see where the disagreement comes from. Currently the premise for
the simple search api has been that it didn't need any language bindings.
Applications would certainly wrap the interface in a native object allowing
for mainloop integration, but it didn't need any code from the Wasabi
project to work.
> > The problem is that 2) warrents a simple search language to be defined
> > to make much sense... 3) is a bit against the nature of your
> > suggestion.
>
> I think the simplicity of the Beagle API belies your assertion on point
> 3. Moreover, not making it asynchronous is going to drastically reduce
> the usefulness in GUI apps. There are dozens of examples in GNOME alone
> that show this.
>
Writing responsive GUI apps is Just Hard. The Beagle API has tried to
> make this as simple as possible. You can implement a fully working
> asynchronous Beagle client that fits in with the GLib main loop in about
> 100 lines:
>
>
> http://cvs.gnome.org/viewcvs/beagle/libbeagle/examples/beagle-search.c?annotate=1.4
>
> We could add a synchronous API to this -- which wouldn't have the
> benefits of Live Queries -- but to still have it work correctly in a GUI
> app you would have to do all of your searches in a thread. At least in
> C, that's definitely harder to do than integrating with the main loop.
Again such an api needs bindings for the toolkit being used. I'm not against
this - actually on the contrary, I just think that we should also have an
api that is easy to use even though you don't use the bindings for your
platform.
I still think it is possible to write a responsive ui with with the paging
queries instead of the fully async ones. An application need not request
1000 hits at a time it could send 10 queries requesting the hit ranges n*100
to (n+1)*100 for n=0..9. An example of this is the Tracker search tool and
the Tracker deskbar plugin (actually they only perform one query, but
still).
Another concern I have (that might be based in ignorance) is that a dbus api
with lots of temporary objects (queries) might be a lot of work for search
engines not having something close to this already. Maybe it is not that
hard to keep track of the objects, I really don't have much experience
here...
> A signal driven query response is dead easy to work with when you
> > Query object is a gobject, but when it is a dbus object matters get (a
> > little) more tricky. I'm not totally against this idea (signal driven
> > query response), but I can't see how we could KIS.
>
> Recall that the low-level D-Bus APIs are not for application authors,
> though. Although most of the bindings aren't quite there yet, app
> authors should be targetting GLib, QT, Python, Mono, etc. bindings. And
> that would map D-Bus signals onto callbacks in the native platform. I
> don't think it's a good idea to intentionally cripple an API to work
> around a (temporary) deficiency in the platform.
>
> > Do you have any specific idea for a dbus interface?
>
> I don't have anything concrete in mind, but mapping something like the
> Beagle query APIs onto a D-Bus interface seems like a decent first step.
Yeah, I think the libbeagle api is nice to work with I give you that.
The ideal situation for me would be a "lowlevel" dbus api that could be used
directly or through some bindings for your platform. My intuition however
tells me that it might be better with a simple API resembling the currrent
proposal and another api to implement platform specific objects on.
Cheers,
Mikkel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.freedesktop.org/archives/xdg/attachments/20061128/5e743dfb/attachment.htm
More information about the xdg
mailing list