New Community Website

Ordinarily, you'd be at the right spot, but we've recently launched a brand new community website... For the community, by the community.

Yay... Take Me to the Community!

The Community Blog is a personal opinion of community members and by no means the official standpoint of DNN Corp or DNN Platform. This is a place to express personal thoughts about DNNPlatform, the community and its ecosystem. Do you have useful information that you would like to share with the DNN Community in a featured article or blog? If so, please contact .

The use of the Community Blog is covered by our Community Blog Guidelines - please read before commenting or posting.

Search Done Right in DNN

Everyone is going to love Search in DNN 7.1. It was rebuilt from the ground-up to provide fast, accurate, efficient, secure and locale-aware access to content in just a few keystrokes. Check this out!


The platform has had Search capabilities for a long time. This was based on a module crawler which would iterate over the various pages and modules in the site and index the content.. Modules needed to implement a specific interface (ISearchable) to store their content for Searching. They relied on SQL Server as the datastore. While the old Search was functional, it lacked speed, accuracy, and relevance.

The commercial editions utilized a different search engine with the capability to index URLs and Files. The URL Crawler was fundamentally different from the platform search in that it relied on the parsing of HTML pages and following links. The File Crawler indexed the content of files (Microsoft Office Documents, PDF’s, etc.).

Objectives of the New Search

To start, supporting two different Search architectures across editions was very taxing and didn’t allow us to showcase DNN in the most favourable light. Differentiation at the feature level makes a lot more sense. Moreover, it was time to enhance the feature set given the importance of Search to so many activities.

We also needed a more efficient Search API for modules. For example, we added the concept of deltas where modules can recognize changes in content since the last Indexing run, as opposed to indexing all of the content all of the time. This change was implemented in HTML Module in the Core and all the DNN Social modules. We look forward to other modules in the Community and the DNN Store following suit soon. There will be backwards compatibility for modules implementing just the old Interface; however, those down-level modules won’t be able to take advantage of the new features such as deltas, tagging, ranking, permissions, etc. until they change over to the new API.

What’s New

The new Search has many useful built-in features in the platform, as well as a number of useful additions in the commercial editions and DNN Social (mentioned at the end). Below are highlights of the new cool features which are available in all DNN product editions:


Results are shown in real-time as you type, showing up as soon you pause in typing. Partial words can also be searched. Previews are designed to help refine your keywords so you can find things with fewer keystrokes. Previews also contain direct links to the actual content so you can access them directly from a single place.


Results are returned blazingly fast. Thanks to the new Lucene.Net repository, there is no additional overhead of SQL or out-of-process calls. Lucene.Net is a best-of-class NoSQL database designed from the ground up for very fast search.


Results are scoped by default to a specific site’s content. In the commercial editions it is also possible to expand the scope to include results for other sites that are part of a site group.


Internalization and localization have been a key priority for the DNN Platform over the last couple of years. We provide the Platform in six languages in the box, starting with 6.2. Search is no different. Content can be indexed and found based on language/culture. For example, a French/French page can only be found when search is executed from a French/French page; at the same time, culture-neutral pages can be found from any language.

Efficient Indexing

Thanks to Delta-based module indexing, new content can be now be indexed and searched quickly.

Ranking and Relevance

Certain Index components such as title, tags, keywords, etc. are ranked higher than general body of content. This allows users to find content based on their relevance. (more on this in a future blog).


We support most of the Lucene syntax such as boolean, wildcard or fuzzy search. Any combination of these can be used for better accuracy.

Filter by Tags

One or more tags can be specified to restrict searches   

Filter by Content Modification Time

Results can be restricted by the time they were modified, with several options provided out of the box.


We’ve gone to great lengths to make Search personalized by design. For example, we perform security trimming on search results to ensure users can only access the content for which they have permission.

Item Level Permissions

Modules that manage collections of content sometimes have requirements where each item in the collection has its own unique permissions to define who is able to view the item. The new search interface has the ability for a developer to provide view permissions for each item which ensures that the search results will be trimmed appropriately and 100% personalized.

Highlighted Results (aka “Hit Highlighting”)

Search keywords are highlighted in the results. In fact, synonyms are highlighted as well.

Near-Real-Time Results

Search can be performed while indexing is in progress. The results may be just a tad behind (which is why we call it Near-Real-Time); however there is no need to wait for the entire indexing operation to complete.


Site Admins can define Synonym Groups containing words with the same meaning. For example, searching for the terms “DNN” and “DotNetNuke” could be made to yield DNN (vice versa). Synonyms can be configured per site.


Ignore Words

Site Admins can specify specific words (e.g. a competitor’s name or profanity) to skip during indexing. We provide Standard English “stop words” (a, an, the, not, etc.). These words can be configured per site, per language.

Page Level Metadata

Page level attributes such as name, title, description, and keywords will be indexed by default which will allow you to easily located in your site information architecture. Similarly, module-level attributes such as the header and footer will also be indexed by default.

HTML Tag Attribute Support

Content stored in HTML tag attributes such as ALT and TITLE is now indexed by the search crawler. This allows you to more easily locate resources such as images, video, and links on your site.

New APIs for Modules

In order to index module-content, modules need to implement a very simple abstract class with just one method. Class is named ModuleSearchBase and method is IList GetModifiedSearchDocuments(ModuleInfo modInfo, beginDate)

Module can also replace their module-specific searching by using a new API named ModuleSearch (more in a future blog).


The architecture of the new search is based on the generic concept of crawlers which are designed to harvest specific types of content and feed them into the Lucene.Net repository for indexing. There is no limit to the number of specialized crawlers that can be created and utilized as part of search.

Still More Capabilities in the Commercial Edition

File Crawling

Microsoft Office and PDF documents are indexed using the File Crawler. Starting with DNN 7.1, we have eliminated the need to install PDFBox or the bloated IKVM library for .Net. This should be a big relief for admins! J

Instead, we use standard iFilters to index Office, PDF and other document-types. MS Windows uses iFilters as well in its Desktop Search, so it’s a well proven technology to efficiently handle various document types. Note that PDF indexing will require installation of Adobe IFilter outside of DotNetNuke (more in a future blog).

URL Crawling

The URL Crawler was modified to leverage the new architecture. Our expectation is that module developers will start to use the new interface for Search as it allows site owners to get the optimal benefit from their content. This means that most module content will eventually be indexed by the Module Crawler. However, the URL Crawler will still play an important role for indexing all content that is not part of a module. This includes content that is part of your site skin, navigation, etc… as well as content that may be located on other sites that you want to federate in your search results.

Search in DNN Social

All the DNN Social modules (Answers, Ideas, Blogs, Social Events, Discussions, etc.) have been modified to leverage the new Search APIs.

As you can see, we’ve put a lot of effort into delivering a super robust, fast, and functional search. We’ve enabled many of its new capabilities in the community edition and deliver even more in the commercial products. We look forward to hearing your feedback as you take it for a spin. Happy searching!!

  • Published:


Simon Douglas
The search function is great however, how do I alter the results page i.e. at present it displays [title],[url],[preview],[date],[source],[author]. How do I remove [source],[author] from the results page.
Simon Douglas Tuesday, August 20, 2013 6:51 AM (link)
Rob Watkins
How about searching user accounts? Can that be done out of the box?
Rob Watkins Tuesday, August 20, 2013 10:23 AM (link)
Ash Prasad
@Simon - There is no way to change that unless you want to go behind the scene and modify code. I've added an enhancement request for Product team to consider.
Ash Prasad Tuesday, August 20, 2013 12:55 PM (link)
Ash Prasad
@Rob - Not at this time. There is member directory module that allows you to do that (since 6.2). I believe it's on the roadmap to make it part of Search
Ash Prasad Thursday, August 22, 2013 12:59 PM (link)
This looks awesome. When is 7.1 going to be available for download?
manxmidge Saturday, September 14, 2013 1:33 PM (link)
Ash Prasad
@manxmidge - 7.1 is already released, in fact we are on 7.1.1 now :)
Ash Prasad Sunday, September 15, 2013 12:58 PM (link)
Robbie Cozad
fyi - the link to the Adobe iFilter you provided was for a very old version that didn't work for us after installed. I was able to get to a working version through the link in the superuser manual.
Robbie Cozad Tuesday, September 17, 2013 4:48 PM (link)
Ash Prasad
@Robbie. Thanks for the correction. We recommend version 9.0 of Adobe iFilter to use, I believe there is a newer version available, which may have issues, which is why we recommend 9.0.
Ash Prasad Tuesday, September 17, 2013 5:37 PM (link)
David O'Leary
Where can developers learn about how to integrate the new version?
David O'Leary Thursday, January 16, 2014 4:21 PM (link)
Ash Prasad
Have a look into my other blog: and then these slides:
Ash Prasad Thursday, January 16, 2014 6:12 PM (link)
ben gordon
I'm curious. Are we able to click on one of our search results to open the document? Or does is just redirect us to the page where the document lives? Am I missing a setting somewhere?
ben gordon Monday, June 8, 2015 2:41 PM (link)
Tali McGregor
How do I configure the results? (I want it to only show the pages, and not all the different modules on the pages that share the same keyword.)?
Tali McGregor Tuesday, March 29, 2016 10:24 PM (link)
Tali McGregor, go to the search results page -> edit mode -> configuration -> module settings. Select the content to index
Thursday, June 9, 2016 9:59 AM (link)
Ash Prasad
@Tali - You can change this via module setting
Ash Prasad Tuesday, June 14, 2016 8:01 PM (link)
Rodrigo Ratan
images in the post are broken! :(
Rodrigo Ratan Saturday, August 20, 2016 5:39 PM (link)
Michael Tobisch
Is it possible to query the index in c# code, e.g. all new and modified documents from the last 5 days?
Michael Tobisch Tuesday, January 10, 2017 10:50 AM (link)
Ash Prasad
@Michael - yes, you can do that. Provide appropriate BeginModifiedTimeUtc and EndModifiedTimeUtc in SearchQuery object while calling ISearchController.SiteSearch
Ash Prasad Tuesday, January 10, 2017 12:28 PM (link)
Michael Tobisch
Thanks @Ash! This is very helpful.
Michael Tobisch Wednesday, January 11, 2017 10:52 AM (link)
Michael Tobisch
"Note that PDF indexing will require installation of Adobe IFilter outside of DotNetNuke (more in a future blog)." - Does this already exist?
Michael Tobisch Thursday, June 1, 2017 6:58 AM (link)
James Hanson
@Ash Thank you for the run down. Everything works really well so far, but I had a question on the Permissions property on SearchDocument. It's a string and I want to add multiple roles to the permissions so that any one user in that role would get a return when searching. I have tried the role names as a string with no luck. It only works when one role name is applied. Is this limited to only one role?
James Hanson Friday, December 22, 2017 7:41 PM (link)

Comment Form

Only registered users may post comments.


Aderson Oliveira (22)
Alec Whittington (11)
Alessandra Daniels (3)
Alex Shirley (10)
Andrew Hoefling (3)
Andrew Nurse (30)
Andy Tryba (1)
Anthony Glenwright (5)
Antonio Chagoury (28)
Ash Prasad (37)
Ben Schmidt (1)
Benjamin Hermann (25)
Benoit Sarton (9)
Beth Firebaugh (12)
Bill Walker (36)
Bob Kruger (5)
Bogdan Litescu (1)
Brian Dukes (2)
Brice Snow (1)
Bruce Chapman (20)
Bryan Andrews (1)
cathal connolly (55)
Charles Nurse (163)
Chris Hammond (213)
Chris Paterra (55)
Clint Patterson (108)
Cuong Dang (21)
Daniel Bartholomew (2)
Daniel Mettler (181)
Daniel Valadas (48)
Dave Buckner (2)
David Poindexter (12)
David Rodriguez (3)
Dennis Shiao (1)
Doug Howell (11)
Erik van Ballegoij (30)
Ernst Peter Tamminga (80)
Francisco Perez Andres (17)
Geoff Barlow (12)
George Alatrash (12)
Gifford Watkins (3)
Gilles Le Pigocher (3)
Ian Robinson (7)
Israel Martinez (17)
Jan Blomquist (2)
Jan Jonas (3)
Jaspreet Bhatia (1)
Jenni Merrifield (6)
Joe Brinkman (274)
John Mitchell (1)
Jon Henning (14)
Jonathan Sheely (4)
Jordan Coopersmith (1)
Joseph Craig (2)
Kan Ma (1)
Keivan Beigi (3)
Kelly Ford (4)
Ken Grierson (10)
Kevin Schreiner (6)
Leigh Pointer (31)
Lorraine Young (60)
Malik Khan (1)
Matt Rutledge (2)
Matthias Schlomann (16)
Mauricio Márquez (5)
Michael Doxsey (7)
Michael Tobisch (3)
Michael Washington (202)
Miguel Gatmaytan (3)
Mike Horton (19)
Mitchel Sellers (40)
Nathan Rover (3)
Navin V Nagiah (14)
Néstor Sánchez (31)
Nik Kalyani (14)
Oliver Hine (1)
Patricio F. Salinas (1)
Patrick Ryan (1)
Peter Donker (54)
Philip Beadle (135)
Philipp Becker (4)
Richard Dumas (22)
Robert J Collins (5)
Roger Selwyn (8)
Ruben Lopez (1)
Ryan Martinez (1)
Sacha Trauwaen (1)
Salar Golestanian (4)
Sanjay Mehrotra (9)
Scott McCulloch (1)
Scott Schlesier (11)
Scott Wilkinson (3)
Scott Willhite (97)
Sebastian Leupold (80)
Shaun Walker (237)
Shawn Mehaffie (17)
Stefan Cullmann (12)
Stefan Kamphuis (12)
Steve Fabian (31)
Steven Fisher (1)
Tony Henrich (3)
Torsten Weggen (3)
Tycho de Waard (4)
Vicenç Masanas (27)
Vincent Nguyen (3)
Vitaly Kozadayev (6)
Will Morgenweck (40)
Will Strohl (180)
William Severance (5)
What is Liquid Content?
Find Out
What is Liquid Content?
Find Out
What is Liquid Content?
Find Out