Thursday, October 27, 2005

DotNetNuke (DNN) has an ISearchable interface that module developers can implement to allow their content to be indexed by the internal search system. 

This system has some significant limitations with the way it handles indexing.  Since it is not crawler driven it does not index anything except the text explicitly fed to it through modules that implement ISearchable.  You could give your page a great title and the search will never find it.  In fact the only thing I like about the ISearchable solution is that is can be made security aware and that it is provider based.  Of course if you attempt to use a different provider you are still limited by the overall solution, so even that is not great.

My next big frustration with ISearchable is that it is used to tap into the built-in Syndication feature for modules.  If you want the RSS feed for your module to work with the integrated syndication option then you have to implement ISearchable.  However there is a major problem in the implementation.  The links in the RSS can only get you back as far as the module itself.  If you look at the announcements module RSS output you will see what I mean.  The item links should get you to the articles, not just the list of articles.  I attempted to use this for syndication on a recent module and ran into this brick wall.  The solution is to write you own RSS output and forget about ISearchable for syndication.  Hopefully DNN will include a new interface specifically for the syndication feature in the future.  DNN team, if you are listening I would be happy to write this functionality if you will include it in the core!

My recommendation at this point is to forget about ISearchable completely.  For search and syndication it is very weak and simplistic.  My favorite alternative at this point is my own implementation of EasySearchASP into DNN.  On my new DNNSecrets site I am using the articles module from Scott McCulloch.  It happens to implement ISearchable.  I have added the EasySearchASP module to the search results page so you can compare the built in results with this much improved alternative.  Of course EasySearchASP is not free, but I think it is worth it to provide site users with a search that works!

I would love to hear your feedback!  What do you think of the ISearchable interface?  How do you like the EasySearchASP alternative?

10/27/2005 8:49:10 PM (Mountain Daylight Time, UTC-06:00)  #    Disclaimer  |  Comments [10]  |  Trackback
Related Posts:
DotNetNuke 3.2, 4.0 Released

11/2/2005 10:54:20 AM (Mountain Daylight Time, UTC-06:00)
Cory,
I think that some of the limitations you mention are more a result of limited documentation rather than any limitation of the ISearchable interface. Your module does not need to implement ISearchable in order for its content to be searchable. As a matter of fact, the only requirement for ISearchable is dictated by the default IndexProvider (ModuleIndexer). It is easy enough to write your own Indexer to gather whatever content you wish and submit it to the searchdatastore. I recently did this exact thing for PortalStore and it works great.

Also, the guid you pass in the SearchItem allows you to pass a module specific querystring which can be used to display the exact view you wish. Again, this is totally up to the module developer to implement views driven by querystrings rather than some hidden state information (ie something stored in session or some other statebag).

Ultimately the entire search infrastructure is written following the provider model so with a little development of your own indexing provider and datastore provider you could completely replace the built in search engine (minus a small amount of glue in the core to link the indexer and datastore).

You can look in an upcoming .NetDJ article on writing custom IndexProviders.
11/2/2005 11:15:24 AM (Mountain Daylight Time, UTC-06:00)
Thanks for the feedback, I will have to do some more experimenting. I wondered if I might be missing something.

How about de-coupling the syndication feature so that what gets exposed via RSS can be unique from the search results?

Thanks for the clarification on this one.
11/23/2005 6:30:41 AM (Mountain Standard Time, UTC-07:00)
As far as ISearchable not finding a module's title, the ISearchable implelmenation for the module can simply append the title to the text that is returned in the SearchItemInfo content property. This lets the indexer include the Title in the indexed content. It is true that it is up to the module developer to do the right thing, but this is the common pattern I've seen.
emperorwal
7/6/2007 1:51:09 PM (Mountain Daylight Time, UTC-06:00)
What is the most important information we should know about amitriptyline? You can buy cheap amitriptyline from my homepage :)
9/12/2007 11:18:07 AM (Mountain Daylight Time, UTC-06:00)
Well, I'll only comment on the aspects I've done research and coding, the actual rss piece. The syndication content for most Core modules uses the built-in common RSS method to retrieve content from items built in the search mechanism. When the Blog module was introduced, it did have it's own RSS synciation routines. Now, I would agree that there is a lot of confusion about how to handle rss item tags - link and guid. For my part, I try to follow the RSS v2.0 specs and advice, but that doesn't mean developers of rss apps do. In fact I see a lot of evidence to the contrary.

When I was working on the DNN Core RSS piece, I offered to change some things, but in the rush to get the latest updates to DNN out, it was decided to just fix some things not all things, as the whole process was going to change. It sat that way for many versions, and only recently has begun to change. Still that quirk of pointing to the the module, rather than the actual article is a problem, mostly due to how developers think about RSS in general.

The guid tag is defined pretty well in the RSS v2.0 specs, see this link http://cyber.law.harvard.edu/rss/rss.html#ltguidgtSubelementOfLtitemgt

Basically, it offers the best guidance, but won't help if internal programming doesn't make use of it.

The problem with syndication in DNN is that it's too tightly coupled to the internal search mechanism and caching. Also, there is no enforcement of using an internal RSS method to build syndication for a whole site, as you see with the Blog module example. I would rather see a completly different approach, but all of the Core modules would need to be modified to include some key data to accomplish a better RSS syndication method that takes advantage some other RSS namespaces, such as Dublin Core, and others. Of course, this is going down a road that is long, and I don't want to take you there, but if you're interested, I'd discuss it further.
5/18/2008 7:04:47 AM (Mountain Daylight Time, UTC-06:00)
generic diflucan online check
5/18/2008 7:07:04 AM (Mountain Daylight Time, UTC-06:00)
Generic Prozac Sales
5/18/2008 7:10:10 AM (Mountain Daylight Time, UTC-06:00)
generic carisoprodol purchase
5/18/2008 7:13:36 AM (Mountain Daylight Time, UTC-06:00)
get brand name wellbutrin
5/18/2008 7:15:00 AM (Mountain Daylight Time, UTC-06:00)
Ordering next day amoxicillin
Name
E-mail
Home page

Comment (HTML not allowed)  

Enter the code shown (prevents robots):