2006/11/27, Kevin Krammer <[EMAIL PROTECTED]>:

On Monday 27 November 2006 12:08, Mikkel Kamstrup Erlandsen wrote:

I am not a searching or indexing expert, merely wanted to input some
information regarding D-Bus sync/async calls :)

> I think you raise a really good question Kevin. Let me  first introduce
> some  terminology to ease the communication.
>
> Page Query: All results for a given query is returned in one chunk. This
> call is still *async* since it is over dbus. This is how it is
sugegstedin
> on the WasabiDraft wiki page.
>
> Async Query: Query results trickle in as the search engine picks them
up.
> Ie all query results are not returned in one batch.

I'd rather call it "Full" and "Partial" Query or Query with "Full"
or "Partial" delivery.



I was not trying to establish a convention, I just needed some words for
it.  For what it's worth I think Full- and Partial Delivery are the best
terms. However, for method names I actually think my names make more sense.


In the page query the client can simulate an async query by requesting
> several blocking queries with the same query string, but different
> page-ranges. This gives a small problem with page ordering, but nothing
> that the client app could not work around. The big benefit for page
queries
> is that server side sorting (score, relevance, date, whatever) is a
> no-brainer for the client. Just append the "sort:<sorttype>" switch to
the
> query string.

How long does a search service have to cache such a query - result
combination?


That's up to the implementation.

Or is searching so fast, that the same query can be re-done on every call?


Again, some backends will have native caching capabilities, others won't. I
think we should focus on keeping the interface easy to use for application
developers, and leave the headaches to the search engine devs... Sorry guys
:-)


In the async query you have a sorting problem. The client cannot sort the
> hits, unless each returned URI also has metadata associated with it (it
> looks this stuff up with another dbus call). I see a huge benefit in
> allowing the results to trickle in (and allows for canceling queries as
> Kevin points out). The async query is also much more suitable for live
> queries (in the sense of updating the query when the on-disk files
change -
> or are deleted/created).

Would it be possible to associate a sorting key with each match?
If so it could be part of the returned data, i.e. the result being an
array of
tuples of URI and key.



I don't know if this would make sense actually... How would the backend know
what the final sort order would be if it hasn't collected all hits? - I'm
not ruling it out, I'm just not able to see how it would work out...


So what do I think? I see 2 options:
>
> 1) Change the Query method name to PageQuery and add another AsyncQuery
> with a signature and behavior we need to think a bit about.
>
> 2) Don't change the org.freedesktop.search.simple interface, but create
> another interface generally aimed at live queries - or maybe include
this
> in the "advanced" search interface when we get to defining that.

A more advanced interface could be based on query objects, i.e. the client
requests a remote peer object for a specific query and the service creates
an
handler object and returns the object path.


Yeah, that could be an idea. This would not be a good idea for apps spawning
tons of searches though. And I actually think we should pay close attention
to catering for massive search requests. I can easily picture a future where
there are some client or other that does a bunch of searches in the
background showing relevant information to your current context... (just one
example).

The client can then call this object's methods and listen to this object's
signals, without needing to reference it with the query string at each
call
or on each signal. The object path will be the reference


Again, I like the idea - but I see some problems with it though (as
mentioned above). Maybe it should rather be a server side client proxy or
something (that sounds like an oxymoron :-)). Where the remote object does
not represent a query, but rather a dedicated connection. I know that this
is possible with dbus, but I have never played around with it...

Cheers,
Mikkel
_______________________________________________
xdg mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/xdg

Reply via email to