[KPhotoAlbum] Idea for quick search feature

Jesper K. Pedersen blackie at blackie.dk
Thu Apr 26 13:38:47 BST 2007


I agree with your analysis in the mail, and _have_ read it, but had no urge to 
comment on any of it :-)

Cheers
Jesper.

On Wednesday 25 April 2007 16:39, Shawn Willden wrote:
| On Wednesday 25 April 2007 02:12:35 am Jesper K. Pedersen wrote:
| > I like the idea, but do have a few concerns/ideas/whatever.
| > - First, It might be usefull with some way to specify wheather searching
| > should be incremental, or when enter is pressed (in the case for
| > searching taking 20 sec :-)
|
| I've been struggling with that as well.  My current thought is that I'd
| like it always to be incremental, but to see if we can apply enough
| cleverness (uh oh!) to keep it responsive.
|
| I think even a fairly straightforward implementation will be pretty fast
| for the XML backend, especially since I expect once the SQL backend is
| fully functional, everyone with large databases will move to it.
|
| Still, I do have a couple of ideas about making the queries fast for XMLDB.
| The first, and most obvious, is that the in-memory incremental searches
| will be a process of successive refinement.  Adding another character to
| the search string will only narrow the search, so there's no need to search
| the whole database again.  This means that, usually, only the first few
| characters you type will be slow.
|
| To address this slowness, I'm thinking that the search engine should run in
| a separate thread.  Obviously, that poses some potentially serious
| concurrent-access issues.  I haven't yet looked into what locking
| infrastructure is in place to avoid them.
|
| (Aside:  As a future refinement, it might be good to look into the
| possibility of searching in multiple threads.  Search is easily
| parallelizable, and given the trend towards multi-core machines, in a few
| years it could be a big help. Both of my computers now, laptop and desktop,
| are dual-core, and I wouldn't be surprised to have a quad-core by 2010).
|
| Another possibility I'm experimenting with is to use a patricia trie to
| accelerate tag searches.  Constructing the trie would take a little time,
| but I'm more concerned about how much memory it would consume, so that's
| what I'm fiddling with now.  It's also possible that using a trie rather
| than a standard tree won't gain much.  In any case, if those approaches
| prove workable, they should make searching the tags very fast.  One
| downside of using a trie (or a tree) is that it will search tags by prefix.
|  That's not so bad, though, and it's what the search bar currently does for
|
| Anyway, I'm fairly confident that as-you-type searching for in-memory
| databases is feasible, although the thumbnails/counts displayed may be slow
| to update for the first few letters.
|
| SQL databases are another can of worms, both because they're going to be a
| lot bigger, and because of the nature of SQL queries.  Allowing
| interactive, incremental searching with a SQL database is either easier or
| harder depending on your point of view, because there's just not very much
| you can do.
|
| The only things I can see that we can do are:
|
| 1.  Run queries in a separate thread.  Pleasantly, there are no concurrency
| issues with this.
| 2.  Delay execution of queries.  Perhaps we can wait until the user stops
| typing (more precisely, hasn't typed a character for some period of time)
| or hits enter before initiating the query.  The delay could be
| automatically tuned based on how long queries take, because there's little
| point in having a delay that's significantly longer than the query would
| have taken. 3.  Try to optimize the queries, by structuring them well and
| by making sure that all applicable indexes are in place.
|
| Any other ideas?
|
| > - Imagine this use case:
| >   I type June in the search bar.
| >   I then see I have 2000 images from June, and want to start drilling
| >   I therefore press persons
| >
| > Will the search bar still say June? and if so, can I now not search in
| > the persons list?
|
| Good point, and a blindingly obvious one that I somehow missed.  I'm liking
| Angel's idea about adding the click-selected criteria to the search bar
| more and more.
|
| In that case, your scenario would go like this:
|
| 1.  You type June, and see you have 2000 images.
| 2.  You click "People"and the list of people categories comes up.  The
| search bar contains "June People:" and your cursor is positioned after the
| colon. 3.  You type "s" and the list is narrowed to names beginning with s.
| 4.  You click on "Shawn Willden" and the search bar contains 'June
| People:"Shawn Willden"' and you get back to the "counts" view, with the
| appropriate numbers.
|
| Obviously, you could also have just typed the search string to begin with. 
| As a power user and fast typist, that's probably what I would have done. 
| For novices and those who prefer the mouse, they can construct queries by
| clicking -- and in the process the app will teach them how to construct
| query strings, leading them towards power-userhood.
|
| > Jesper (Who still only have internet when he goes to a bar)
|
| Well, that should make for some interesting posts!
|
| 	Shawn (currently sitting on a beach in Daytona Beach, Florida)

-- 
Having trouble finding a given image in your collection containing
thousands of images?

http://www.kphotoalbum.org might be the answer.



More information about the Kphotoalbum mailing list