flag of the United Kingdom

Advanced Search Interface

Date:  Thu, 14th-Oct-2004prevnext

Tags: CMS, Urban Mainframe, Website Development

Over the past week I have completely rewritten my CMS search-engine (note: the new search-engine isn't running on this website yet as there is still some work to do).

Teaser: I have managed to vastly increase search performance along with adding new facilities for filtering and scoping. The new search-engine also supports complex, boolean queries.

I plan to write a more detailed article as and when I get the new search-engine running on the Urban Mainframe. The point of this post, is that I'm struggling with the user-interface of the "advanced search" panel - and I'm fishing for a little guidance...

Advanced search being what it is, I want to offer controls for selecting the scope of a search (by folder (section of the website) and/or by content type) otherwise known as filtering, yet I want to make it as easy as possible to refine the search.

Take a look at the existing advanced search interface - it's a mess. I have already decided that I am going to drop the following controls from the interface:

  • case-sensitivity - because I believe it is basically superfluous
  • logic switches - because logic can now be expressed in the query itself
  • display x results per page - is this necessary?
  • exclude these elements - this will be removed (temporarily?) because the new search engine doesn't support this level of selectivity (yet)

Which leaves us with the "exclude these folders" section...

I've never been happy with this. The idea here is that you can restrict the scope of the search by selecting a checkbox for each folder that should be excluded. But I think this is counter-intuitive: surely it would be more logical to check the folders that you want the search to encompass? The check "feels" like a positive action to me so, even though I wrote the blasted thing, I still find myself checking those folders that I want my search to include - which is exactly the opposite of the requirements of the interface design.

There is another problem with the "exclude these folders" panel - it doesn't scale. The checkboxes are dynamically generated based on the content of the website. If I add a new folder, it is automatically added to the selection. This is fine when the website architecture is based on 9 folders (as it is at the time of writing), but what would happen to the UI if I added another 9 folders? What would happen if I added 100? I'll tell you what would happen - the "Advanced Search" page, or at least the folder-exclusion panel, would be rendered useless - a confusing mess of checkboxes. So my new user interface has to accommodate a potentially large collection of folders.

My problem then, is that I want the user to be able to define a search query with high level of control, yet I want it to be as easy as possible to express that query. Let's look at an advanced query (in English):

Search for pages that contain the words "search" and "engine" and if a matching page also contains the word "advanced" then assign it a higher relevance. Perform this search within the "Weblog" folder (and its descendants) and also search the "User Comments" within that folder. Do not search the "Archives" (pages that are not referenced in the website's navigation, but which remain available at their published URI).

With the new search-engine, we can express the entire first sentence of this request in the search query-string itself:

search +engine >advanced

In order to control the scope of the search I am considering the following:

Example Search Scope Controls

Folder Selection(s)

(Use "Ctrl", "Shift" or command keys to select multiples)

include exclude

Content Type Selection(s)

(Use "Ctrl", "Shift" or command keys to select multiples)

include exclude

I am not going to offer any explanation for these controls whatsoever, that would defeat the point of this exercise.


  1. Do the controls make sense as they stand (ie: with no further documentation)?
  2. Would you be able to able to fulfill the requirements of the query described in [1] with the given query-string [2] and the controls illustrated above?
  3. Can you suggest a better way to implement this functionality?

Help me... Please!

You can comment on this entry, or read what others have written (7 comments).