Showing posts with label Search. Show all posts
Showing posts with label Search. Show all posts

Thursday, November 15, 2007

My new favourite Global Search Engine

Whenever people hear about "search engines" they immediatly think Google. A few of the early bloomers might even remember Altavista or Lycos - but they still prefer Google. Sure, they might have seen a challenger or two in their time (Live Search being one) but usually they've tried it a couple of times and then went back to their safe heaven - Google.

I use Google too, for my global searching needs and I love it! Or well....it's at least the best I know - or rather - it was the best I had known. Actually, when I think about it, it's not all that good. Sure, the index is big, and the ranking often makes sense - and it's certainly a nice feature that I can type in 2+2 in the search field and get a result back...But to be honest, once you get your results in Google, you are pretty much on your own - and need to start paging to find what you are looking for in the 13498919384981339849184391 results it found for you (in 0.0o00001 seconds I'm sure). And even the result you're looking for is right in front of you on the first page you might not even know that it's the right result - cause all you got to identify it with is a title and a couple of words showing the immediate context of your search query.

I always excused Google to myself, thinking: Well, being a global search engine I suppose thats how they got to do it - since they can't rely on good and structured data on the web they'll have to go by the lowest common denominator. A good local site search might do better - but only because it can to some degree require the data it indexes to be more structured.

But recently I saw a demo, that made it obvious it doesn't have to be that way. The challenger who's got a brand new approach to global web search is Exalead - a french search engine company. It was at a Panel debate about Enterprise Search in CMForum2007, where Exalead really stood out - both as an enterprise search and as a global search.
Their trick: They automatically retrieve structured data from an unstructured mess.
By having this structured information they are able to help you narrow your search results to the results that are relevant to you. And their search UI is filled with usability enhancing features - take for instance the thumbnails. Showing thumbnailed search results isn't a new idea (in fact I made a demo of it 4 years ago - and many others were doing it before me) - but it's extremly helpful on a global search engine - instantly you get an idea of what kind of page you'll end up at if you click the link.
On top of that they implemented a simple automated clustering (looking a lot like Suffix Tree Clustering to me) - that although it could be better (look at vivisimo guys) still is pretty helpful in suggesting additional search terms for narrowing the results even further.

My only complaint is that the Exalead index doesn't seem to be as complete or up-to-date as google's - I suppose they still have some investments in giant data-centers ahead of them to reach that point - but it's already pretty usefull!

On a side note: Exalead also makes a very nice little desktop search that can be downloaded for free from their site - check it out!

Wednesday, July 11, 2007

Majestic

A major problem for most global search engines is the simple fact that the net grows so rapidly that no matter how many serverfarms they build, pages are being created or updated faster than the search engines can detect and index them.
I recently came across Majestic that has a really interesting approach to this problem: Distributed crawlers. They've made a simple crawler-client that can help distribute the indexing among all the volunteers who provide spare bandwidth and computertime to this noble task in much the same way as some people donate time and bandwidth to the SETI@HOME project or my personal favourite, the search for the next Mersenne prime.
However, the idea with distributing the search seems really useful. Now, if only they had done something novel to the search-end instead of just copying Google I would have been thrilled. But I like the idea anyway. Check it out at http://www.majestic12.co.uk

Oh yeah, while you're there, check out the C# source for their HTML Parser. It's awesome. Fast and furious!

Tuesday, May 29, 2007

Is Google high on LSI?

Ah, the headline caught your attention :-) Well, don't worry. LSI is not a new fancy designer-drug and although the G company has a history of flying high, I doubt they are on anything stronger than Coke Zero.
But yesterday I just came across this excellent post by fellow blogspot blogger, John Colascione.
In the post he brings some interesting examples on how Google has implemented LSI (Latent Semantic Indexing). Back in 2005 I had the great pleasure of working with Moses Martiny and Kenneth Vester at Mondosoft while they were writing their Master Thesis on one of my favourite topics of all time, Document Clustering. I remember how I through them learned about LSI which is quite an interesting approach to automatic keyword extraction.
With this technique you can get some amazing results of keywords extracted from documents that doesn't even contain the actual words - although it should have!
If I recall correctly the basic approach is something like making a matrix of documents and words containing the entire document collection, and then use an algorithm like SVD to determine the most distinctive words for each document - even without the document containing the words. Funny stuff!

Naturally I couldn't read John's post without trying Google solution myself, and although it's not every term that has good LSI matches, there was some interesting ones. For instance it would seem that the word "~rap" is connected to both "Eminem" and "Lyrics" as well as "Rdf Api for Php" (the last was obviously the most interesting hit in my humble opinion).

Anyway, it's cool that Google is playing around with this technology - just as all the other search giants (and challengers). Now, if only it was incorporated in the search in a better way than the tilde ("~") query line operator.

Friday, March 16, 2007

MondoSearch Result Authentication

A very typical request I often hear from customers and partners is the ability to return only the results that the current user is allowed to see. This desire is very natural, but can often present quite a challenge to 3rd party search engines like MondoSearch. The problem is that it varies a lot from each individual setup how authorization works, and hence no general solution can be made. We can only deliver specific solutions of authorization to specific systems (like we have done for EPiServer or Sitecore) or provide general toolkits/examples that makes it easier to custom-build an integration.
The problem with authenticated problems can really be divided into two sub problems:

  • Indexing secure content
  • Searching in secure content
Indexing isn't that big of a problem. There's many ways to make that content available to the search engine. MondoSearch has built-in support for basic-authorization, challenge-response (integrated authorization) and forms log in, just as well as it's quite easy in many CMS systems to override the security if the client originates from a specific IP, or has a specific HTTP Request setting. Generally we see only very few problems in actually indexing the content. The only thing that can be tricky is when the content on the individual pages vary based on who is logged in. In order to handle that, would require the Search Engine to index the same URL, as all the different users that can access it. Luckily pages with user-dependent contents are typically portal pages that are not all that interesting to index. The articles, documents and database content that's interesting to index are not a problem.

Searching in Secure Content is really the main challenge when it comes to authenticated contents. Even though security for the individual pages typically is checked when you try to access a page, it can still be quite revealing when the title (and perhaps description) of a page is displayed on the result page. In fact, to be totally safe, a user who doesn't have access to certain documents must not even know of their existence from the result page! (Suppose I searched for "invasion plan Iran" on Pentagon's website and was told that there were 10.000 documents I that matched the phrase, but none I was allowed to see).
In order to achieve this there's generally three approaches:
  • Authentication by filtering. Store access rights when indexing the documents and use them in the search
  • Authentication by exclusion. When performing a search, manually check that the current user has permission to see each of the results, before returning it.
  • Rules based authentication. Where a number of specific filters is defined for each user-group.
In general I prefer to use Filtering to perform search result authentication.
With MondoSearch this typically means adding Meta-tags (/data) to all documents defining which groups / users are allowed to view them. And perhaps even which groups/users have specifically denied access.
A Meta-tag like that could look something like this:
<meta name="ALLOW" contents=";53;124;351;33;12341"/>
Then, on the result page, all you'll need is a piece of code that extracts the user-id and the group-ids of the current user and then adding search filters to the search query. Suppose we have a user with user-id "42" and who belongs to the group "users" (id: 351) who performs a search that returns a document with the above meta-tag. The MQL that is sent to the search engine would then have to have these filters added:

"... FILTERS ALLOW CONTAINS ';42;' OR ALLOW CONTAINS ';351;' ...."

To also enforce DENY is a bit more tricky, but certainly just as doable.
The obvious benefits here are: It's very (!) fast, it's clean, it's easy
However there's also a number of downsides:
  • Not all CMS systems support outputting permission-lists to the crawler
  • If access-rules change, they will not be propagated to the index until next crawl
  • It typically doesn't work for non-html documents like Office and PDF (since it's kinda hard dynamically to attach meta-data to these types). However there is a number of workaround to this problem.
The alternative to filtering, is exclusion which in my eyes is definitely not pretty, but sometimes necessary. Authentication by exclusion calls for a custom method is defined that checks if the current user has access to a given URL. A pointer (delegate) of this method is then passed to the search engine that will call it and evaluate every result in the result-set.
The obvious problem is the performance of this solution. On a result-set of 10 pages, with a fast-checking method, it can be acceptable, but often result-sets can be very large. Imagine having to call a custom-made method for every one of 100.000 results - or worse!!
Another problem is that in order to pass a delegate to the search engine the search-engine needs to be installed on the same server as the CMS - something that doesn't always fit into the desired machine architecture.
Of course the performance can be increased of such a method in some cases: intelligent caching, only check the results on the first page, etc. but in my experience it's never a really good solution. In my eyes the only really acceptable use of this is as a compliment to the filtering search (for instance to check access for non-html documents) - or where no other solution works.
In order to set this up on a MondoSearch template, assign a method handler to the "OnAuthorize" event in the SearchControl, like this: OnAuthorize="CheckAuthorization" .
Then define the method elsewhere:


public bool CheckAuthorization(string url){
return true;
}

The last authentication method I will briefly touch in this post is to use a number of rules.
The idea here is that by applying knowledge about the security setup on a website, a couple of simple rules might do the trick.
Imagine a simple setup where only two types of visitors exist on a web-site: logged-in and not-logged-in, and that all the content that only the logged-in users were allowed to see is in the sub-directory "/secure".
In this case you could simply apply some additional MQL when a visitor performs a search:
if(!logged-in){ mql+="FILTERS @CHANNEL!='secure'"; }

This is an ideal approach, but it doesn't work on all sites.

Friday, February 16, 2007

MondoSearch for EPiServer (Part 1)

Last year, while I was creating the MondoSearch for Sitecore integration I was at the same time technical-contact/project manager for the MondoSearch for EPiServer integration. Besides from keeping me busy for half a year, this provided an excellent opportunity to learn a lot about these two state-of-the-art content management systems, each with their own strengths and difficulties.

With the EPiServer I was so lucky to be working with the former (now again current) EPiServer Product Chief, Roger Wirz, through his company Briomera. In the end I was very pleased with the results of our joint work - it turned out to be quite a cool integration of the products, deeper integrated than any other EPiServer search tool I've seen. In November and December I got to travel around Sweden and demonstrate it to EPiServer partners in both Gothenburg and Stockholm. It got a lot of interest, and several customers are already making their own implementations based on the integration.

I've been wanting to share some screenshots of the integration with you all, so here goes.

Just as with the Sitecore Integration, the integration for EPiServer is also based on the MondoSearch Integration Services, which is a set of XML Web Services, that's based on MQL and DataSets.
In the Configuration section it's possible to setup the connection strings and urls to all of the web-services as well as using the Diagnostic tool to check that all services are up and running. This is a handy one-place-stop for trouble-shooting.


If we stay in the Admin section of EPiServer we might draw our attention to the Crawler Control.
This is where you can control the indexer, see crawler logs, manually start a new crawl, and also setup an EPiServer Heart Beat that on regular intervals checks if it's time to start the crawler - and if the last crawl went okay.

When it comes to the actual search implementation, we've adjusted the standard MondoSearch Template 1 to work within EPiServer, and also created a PageType for it.
By adding a User Control with meta-tags to all the pages we're also able to enhance the meta information on the pages as well as categorize either using EPiServers categories, or the built-in MondoSearch Categories.
All text-strings used on the search-page can be found in EPiServer style language xml's and can quite easily be translated.
In the integration we've also included support for 2 authorization methodologies in order to fully support EPiServers authorization. This means that when you search on your EPiServer you'll only get back the results you are allowed to see.


Since the Editor search that comes with EPiServer sometimes can leave you wanting a bit more we also included an Editor Search based on the MondoSearch index of the website. This is an easy way for editors to find the documents they want to edit.






This was a brief introduction to the configuration and searching facilities in MondoSearch for EPiServer. When I have time I'll post some more screenshots of the neat interaction with BehaviorTracking and InformationManager from within EPiServer.

Thursday, February 15, 2007

Improving MOSS Search

One of my colleagues, Lars Fastrup, has started a really nice blog around all the work our Ontolica team is doing in relation to improve the usability and functionality in MOSS 2007.
Recently Lars posted some really nice screenshots of the upcoming version of Ontolica, that'll probably wake the interest with most experienced MOSS users!
His announcement of a lightweight version of Ontolica introducing wildcards as a long-lost search feature in MOSS has certainly made quite a buzz already through many a weblog.

Well done, Lars and welcome to the blogging sphere :-)

Hall of Fame: Coleman.com

Every now and then I come across a search implementation I really, really like.
Some places where people think outside of the customers) on their site. In these days where the search market it being heavily commoditized, and more and more websites doesn't care about the quality of their search functionality as long as they have it, it really fills my heart (I know, I'm turning thisbox in order to help the visitors (and/or into a sob-story) with pride to when I encounter MondoSearch customers which has gone that extra mile to use make something thats cool to use.

One of the MondoSearch implementations that I most often showcase to people wanting to see the real power of good site-search is the solution they have at coleman.com.
Coleman.com is a US-based camping gear business, and I think they've made an awesome implementation.

Their solution isn't based on the latest technologies, in fact they still rely on good ol' asp to do the job, but they still managed to put in a couple of really nice features.

Try to go to coleman.com and search for "tents" or "Coolers" or any other product that you'd be interested in.
Now the first thing you'll see is probably a SearchHeader (a query-related banner-add). This will take you directly to a relevant offer they might be having at the moment - or just shorten your way to the products of your interest. I don't know the internal work flows of Coleman, but I can imagine these SearchHeaders being the result of them analyzing frequent search words on the site and then adding SearchHeaders as a response to it in order to help people searching for the most popular terms.
Underneath the add comes the results, in categories. This is an excellent example on why it sometimes can be a good idea to show results in categories.
In the case where you searched for "tent" it's unclear if you are interested in:
a) buying a tent
b) Getting parts for a tent
c) General information about tents
d) Tips on how to use your tent
e) ...

Luckily Coleman Search presents you with the best results within each category right on the first result-page.
Most people are probably interested in buying a tent, so naturally that category goes on top.
And this is what it all comes down to: Search is all about not wasting peoples time. Don't make people waste time on your website looking for the products they want to buy, bring it to them when they ask for it. And when you present them with a search result, make it easy to pick the right result.
In this case, Coleman helps the users by actually showing a small picture of each tent in their "Products" category, along with the price. And if a users feels like buying a tent right there and then, well - it's no problem - just click the link directly on the result-page and add a given tent to your cart!
If you scroll down the results you'll also see a category of Manuals to the various products sold by Coleman. In this case it's quite helpful that they provide a pdf-icon next to the pdf-documents so the user will know what to expect if they select that link...How many times have I not been lost on a company's website, clicked on a result link and then had to wait for x minutes while firefox desperately was trying to load a huge pdf, when I was just expecting a standard document.
In general I find it's always a polite gesture to tell people what they'll get if they click on a link - and especially warn them if they'll end up with something like a pdf (not that I have any problems with pdf-files :-).

At the bottom of the result-page we find the "Advanced Search" field, for searching again and this is actually the first place where I have a little bit of criticism...This area seems a little bit messy in my eyes. There are no clear Gestalts separating the category selection and the search-type selection, and in my opinion both selections are unnecessary. Since the results are divided into categories, and it's possible to drill-down from the results I think the advanced category selection is redundant (and I bet that only very few people actually use it). The same goes with the Search Type. Here it's defaulting to AND-searches, which can be pretty dangerous. Suppose a visitor searches for "Camping Tent". He'll get significantly fewer results than a visitor searching for "Tent" - because not all of the tent-product pages contain the word "camping" although the tents could probably be used for camping :-)
I tend to prefer OR-searches, given that if a document matches all the search-words it's still ranked better than documents matching only some of the search words.


All in all I think it's a nice search implementation with the only recommendation that more simplicity in the Advanced Search section would be nice. Potentially they could also expand the search to include some search-filters, like "search only for products cheaper than X" - I'm sure some users would find that handy.

Tuesday, February 6, 2007

New Functionality: Related Articles

Here's one of those small things I've been working on over the weekend.
If you're using IE, you should now be able to see a new widget-like thing in the bottom of the right-hand widgets. It's "Related Codeproject Articles".

The concept I use to get these related articles is somewhat similar to how the "Related Pages" functionality works in the MondoSearch/Sitecore integration - just based on another platform.

I've written a small piece of javascript that extracts the keywords on this page, and then calls a serverside function to perform an MSN Search on the keywords on one my my all time favourite websites, codeproject.

It's still quite experimental so I don't expect it to work in all scenarios - but possibly a few lucky readers will get to enjoy this functionality now :-)

If anyone is interested in more details as to how it's done, drop me a comment - I might be persuaded to share the code...

Sunday, February 4, 2007

Coding...

These last couple of days I've been busy (as always) coding on several different projects. Probably some of you know the feeling that arise when all of a sudden tons of good ideas emergers in you head at the same time and you can't wait trying them all out to see if they work just as well in the real world as they do in your mind.
I've also kept on coding the Poker library, and I think I've gotten most of the logic right by now. Pretty soon I'll make a short online test of the library and I invite everybody to try it out and see if logic works well enough.
Some of the other ideas I'm working on at the moment:
  • Blog Real Time visitor tracking, enabling me to get an RSS feed with the current visitors on my blog - and possibly even send personalized messages to individual visitors realtime.
  • "Similar Articles" generic javascript code, that will extract keywords from the page it's on, and perform a search on a global search engine for other related articles. I actually got quite far with this idea yesterday but ran into some cross-site xmlhttprequest security issue...
  • My own implementation (or yet another of my own implementations) of a Suffix Tree Clustering algorithms. I'm trying to make it so generic that I can make it available here for download.
  • Map'ed websearch. I'm looking into making Microsoft and Google meet, by using the API for Microsoft Live Search along with the API for google maps and a Geo-IP api in order to show where the results of a websearch are from.
  • (and tons of other projects)
As soon as any of the above is ready for show and tell I'll post them here.

Wednesday, January 31, 2007

MondoSearch for Sitecore (Part 3)

As promised, I'm going to share some more screenshots of the integration between MondoSearch and Sitecore. This time I'll focus on the integration of BehaviorTracking.

BehaviorTracking Portal. The main entry to the BehaviorTracking information from within Sitecore is in the BehaviorTracking Portal, a portal somewhat similar to the well-known Sitecore Today portal, only this time the portlets filling it are BehaviorTracking portlets. Although we're still missing some of the graphics from the original BehaviorTracking this makes out a pretty decent approach to discovering what your website visitors are interested in and by double-clicking on a given keyword, it will open the BehaviorTracking Term Details for that search term.



BehaviorTracking Term Details. When you want to examine a specific search term, you can use the XAML application Term Details. Here you can look up search words, and examine

a) Which search terms are related (meaning which other terms are typically used by the same users in their searches). This can be quite helpful in inspiring new keywords for pages as well as new synonyms for the search.


b) Which pages are typically chosen from the result page, giving you a more exact idea of what the user actually meant. Use this for improving ranking of some pages, or perhaps adding a searchheader or searchname for a given page.


c) The most recent user sessions searching for this term. This might not be so useful, but it does give you that cool "Big brother" feeling :-)


Finally, you can also get BehaviorTracking Item Details. For any given item on the website that inherits from the MondoSearch Base Template, you can see a list of which search terms sent users to the various versions of this page. This is an excellent tool to optimize the content on the individual pages, to the expected content of the users.




As mentioned in Part 2 of this trilogy the along with the integration we also released some code samples, showing how to use BehaviorTracking and search to spice up your site.

On last of these examples is the "Most Wanted" list that is a small control listing the top 5 pages most often chosen from a search result page. I find this to be quite useful, as this is not the most visited pages on the website (the most visited page on a website is quite often the front page that doesn't hold any relevant information at all), but the pages that most people have been looking for. In many cases it will be quite a good help for your users to promote these pages on the front page so they can go directly to them without wasting any more time.

Improving Search with BehaviorTracking

The topic for this post is Behaviortracking (check out the website, cause I'm not gonna spend time here explaining what it is). This is a post where I'm basically gonna pretend I'm in marketing and fill You, my dear reader, with something that might resemble a sales pitch for a particular product.. "Why?" and "Where's the code?" I hear you ask. Well, first of all I feel quite strongly about this - I've seen so many websites that ought to start listening to their visitors instead of their executives - and with regards to the code...well I'm sorry no code this time.

The reason BehaviorTracking is such a cool tool, is that where other web analytics software might tell you about popularity of pages and server loads during the day, BehaviorTracking tells you exactly what you need to know: What are users looking for on my site.
In my mind it's perfectly obvious.
A website is to some degree like a shop. You have some users who browse around the shop, looking at the shelfes and eventually leaving, and some other users who go directly to the clerk at the counter and ask for a specific item. Obviously the people going directly to the counter with a specific goal are the ones most likely to buy - and naturally these are the people you want to listen to. Now, suppose you are the proud owner of a clothes store and a customer walks up to your clerk and asks for a specific pair of "Levis" jeans. Would you like that answer to be:
a) duuh
b) I'm sorry, I don't know anything
c) The jeans department is over there
d) Here is a number of Levis jeans that should fit you, this pair is very popular and this pair here is on sale this week. By the way could I also interest you with a new shirt that matches to go with that?
e) We don't have any Levis jeans at the moment, but I'll make sure to order some. Meanwhile perhaps you'd like to check out this competing brand that looks similar and is a bit cheaper?

(I'm no sales guy, but I could imagine two of the above answers being good - you figure out which).
A good search engine is like a good sales guy greeting people at your store, helping them while selling your products. But in order to always provide the best assistance it needs constant optimization - and thats where BehaviorTracking comes into play. By frequently examining the search patterns of the visitors it's easy to customize not only the website but also the search engine to provide the best possible service to your visitors.

Monday, January 29, 2007

MondoSearch for Sitecore (part 2)

As earlier promised, here's some more info on v. 1.1 of the integration between MondoSearch product suite and the Sitecore CMS system, that was released just before christmas. In this second part of my story I will focus on the search itself and the ways it has been integrated.

The point of the integration was to integrate not only the search engine but also search analytics, crawler administration into Sitecore, making Sitecore a common user interface for both products.

The reason is simple. Although website search over the last couple of years has become increasingly commoditized it's not just something you plug in once, and then expect to have working perfectly ever after. Search is a dynamic thing - like the website it indexes and for the best end-user experience it should be continiusly tweaked and improved to match the expectations of the end-users. The ideal way to do this is by studying the behavior of the users and then optimize both website and search for them (I could talk for hours about this subject, but I'll safe that for another post). Nevertheless that makes it even more important to make the Search and Behavior analytics easy to use for the webmaster/marketing dept. responsible for a given website - and hence we decided to go for as complete an integration between the products as possible.

The search part of the integration includes:

3 Search Result Sublayouts, all based on a Search Template. All of the support Sitecore authorization enabling them to only show the results the logged-in user is allowed to see. All the texts used on the templates is defined in the template, so it's easy to translate in Sitecore. The Sublayouts use the standard MondoSearch SearchTemplate technology so it's easy to change look & feel and add functionality.














2 SearchBox sublayouts, simple and advanced that can be placed on any layout to enable the possibility to search.

Click Item and corresponding layout, enabling logging and highlighting of search results.


A Meta-data xslt rendering for sending item-related meta-data to MondoSearch.



A Base template that allows Sitecore items to have fields to hold meta-data for MondoSearch, including Search categories and indexing rules.














A Crawler Control XAML application that allows an administrator start and stop the MondoSearch crawler as well as publising crawled databases. This tool will also display the current status of the crawler, crawler log and number of indexed pages.


A Sitecore task for starting the crawler
so the Sitecore scheduler can be used to scheduling crawls.


An Editor Search XAML application that allows Sitecore editors access to use MondoSearch to find the items they want to edit. When a result is selected it will of course open in the Content Editor for easy editing.



Templates and items for defining Categories used in Search.



MondoSearch Examples
On top of the integration Mondosoft also supply some coding examples of how to improve the overall functionality on the website. Like this Autocomplete search box that uses frequently searched words as autocomplete suggestions that appear while you type a search query.




One of the other examples is a "Related Pages" box that will use the search engine to search for other related pages to the current page, and "Related Topics" that will use Behavior Tracking to suggest search terms relevant for the page you are currently on.

Now, this was just a brief overview of the "search part" of the integration. In the next post I'll go through all the new cool features the integration adds to Sitecore to track visitor behavior and search term popularity.
Later on I'll also show how the it's possible to add SearchHeaders (custom html/sponsored links) to the search results from within Sitecore and outline a couple of ideas I have on how to further improve the overall value of a Sitecore website.

The new update of the Integration demo-site is due to be launched any day now and it'll be possible for all interested to try out these features on their own - either on the demo-site, or by downloading the integration.

Blogspot hint: Google optimization

I just implemented this little optimization of the blog in the hope that it'll improve Google's search results. The problem I noticed that if you find this blog through a search on google, you'll quite often get a link to the front page (allantech.blogspot.com/index.html) in your search results because a related article was on the front page at the time when google indexed the site. However with the current update rate it's also quite likely that when you click that link, the article is removed from the front page already. An example: today I searched for "AllanZip" and this is the result I got:Notice how you are directed to the front page instead of the article page.
The way to avoid this is to put a robots meta-tag on the front page, instructing google to "noindex,follow" meaning "don't index this page but follow the links" - however this shouldn't be put on the item pages. Since BlogSpot uses the same template for both the main page and the item pages, this took a little bit of research, but finally I got this code to do the trick:


<b:if cond='data:blog.pageType != "item"'>
<meta content='noindex,follow' name='robots'/>
</b:if>


I hope this little trick will improve the search results - let's see when Googlebot will honor me with yet another visit :-)

Wednesday, January 24, 2007

MondoSearch for Sitecore (part 1)

As my previous post today might indicate I've been spending my time setting up a public demo-server for the MondoSearch-Sitecore integration.

Even though I was project-manager on the integration project, I must admit that I'm a once again a bit surprised (read: proud) how smooth and easy the integration works once both Sitecore and MondoSearch is installed and working.

It just takes a few steps like installing a package in Sitecore, adjusting web.config, and doing a little customization in your Sitecore website for neatness.
It's a pretty full integration, integration both Search, Crawler Administration, Search BehaviorTracking and Marketing tools for optimizing search within the Sitecore admin UI.

I just need to tweak a few more details to make the website really fit for public display - and as soon as that's done I'll post a lot of screenshots here about it.

For now you will have to settle with this screenshot of the MondoSearch Crawler Control as a Sitecore XAML application.

Friday, January 12, 2007

Adding web applications to a Sitecore IIS site

A problem one often faces when trying to install 3rd party web software (like MondoSearch) on a Sitecore website, is that any non-Sitecore related virtual directory or web-application place on the same IIS website will run into a lot of problems.
This is naturally due to the httpModules, httpHandlers and roleManagers set by the Sitecore Web.Config in the root of the website.
The easiest way to get around this (besides installing on another IIS Site, which can be difficult on an XP developer machine) is to put a web.config in the non-Sitecore related web-application that removes all of the modules, managers and handlers set by Sitecore.

For a default installation of the Sitecore 5.3 demo-site, Printers Inc. this would be:


<httpModules>
<remove name="SitecoreHttpModule" />
<remove name="SitecoreUploadWatcher" />
<remove name="SitecoreXslWatcher" />
<remove name="SitecoreLayoutWatcher" />
<remove name="SitecoreConfigWatcher" />
<remove name="StatCenterPersonalizer" />
</httpModules>
<roleManager enabled="false">
<providers>
<clear />
</providers>
</roleManager>
<httpHandlers>
<remove verb="*" path="sitecore_media.ashx"/>
</httpHandlers>


In other installations / versions this might vary a bit, but you can always check the sitecore web.config and see whats added, so you can then remove it.

Saturday, January 6, 2007

Is AJAX the spice that makes search taste better?

Last spring I wrote a 7,5 ECTS project at ITU along with a friend, Peter Madsen, on AJAX and it's usefullness for improving functionality in a web application - in this case website search.
It was kinda inspired by all the hype around Web 2.0 and the cool features AJAX technologies allows you to do on a webpage.
It's really fascinating the way the web is moving from pages with information towards applications with communication.
To try out the technology we setup two identical search & result pages, that searches on a mondosearch which have indexed www.itu.dk. One of them we did our best to AJAX enable (narrowing search results on the fly, no full post-backs, scrollbar navigation).
Check out the samples here. If you have difficulty sleeping and feel like reading the end report, download it from here.

Later on I've been quite interested in all the possibilities there is in using AJAX along with data from user behavior to improve search - one example could be a feature like an autocomplete drop-down in the search field that suggests commonly searched queries (yes I do realize that this feature has gotten quite popular several places after Google introduced Google Suggest).

The end conclusion of our report? We kind of agree that AJAX is definetly a cool technology that can help extend the functionalities on current old-tech html pages....But the downside is that it's ugly as hell - using tons of different technologies to interact in a spider-web-chaos. Whats really needed is a new web-architecture thats intended for this use and thoroughly designed - not a big rag of patchwork upon patchwork.
This being said, I still won't hesitate to use AJAX to spice up my web-applications in the future.