Saturday, November 12, 2011

How to fix Sharepoint Foundation 2010 Search returns no results

SharePoint Foundation 2010 includes basic searching features. Despite all rumors and recommendations to upgrade to higher level searching packages, the basic SharePoint search works quite well ... and it's very useful.
If your SharePoint server is not returning search results, the following may help you resolve the issue. It's important to create the right accounts, enable the right services, assign the accounts to these services and finally attach the search server to your web applications.
Let's begin ...
  1. You need to create domain accounts for Searching and Crawling. Using the Farm Account (or default accounts) is not recommended. In our example we will use "spSearch" and "spCrawl". Use complex passwords! These domains accounts should only be standard users, no administrative privileges should be applied.
  2. Log into the SharePoint Central Administration Page
  3. CA > Security > General Security > Configure Managed Accounts > Register Managed Account.
    • Enter in "domain\spSearch" and the password you chose
    • Click "OK".
    • You should now see this account in the Managed Account list
  4. CA > System Settings > Servers > Manage Services on Server > SharePoint Foundation Search > Start.
    • Service Account -> "Domain\spSearch"
    • Content Access Account (Crawl) -> "Domain\spCrawl" and the password you chose
    • Leave everything else as defaults (you can change the Database Name if you are having issues)
  5. CA > Security > General Security > Configure service accounts
    • Choose "Windows Service -> SharePoint Foundation Service"
    • Choose "Domain\spSearch" for the account selection
    • Click "OK"
  6. CA > Application Management > Manage Content Databases
    • This is important! For each site you want automatically crawled, you must assign the search server.
    • In the top right corner under "Web Application", choose the web applications to be crawled, one at a time followed by a click on the "database name" column once they are loaded.
    • In the profile page, change the "Search Server" and "Preferred Server for Timer Jobs" to your server.
    • Click "OK"
    • Repeat for any other Website Applications you wish crawled
  7. CA > Monitoring > Timer Jobs > Review Timer Jobs > SharePoint Foundation Search Refresh
    • Choose "Run Now" to begin indexing your web applications (sites)
    • This can take several hours depending on the size of your database(s). Please be patient.
  8. If you're feeling eager and have a background in SQL, you can use the SQL Management Studio to check the progress. If you are not familiar with SQL, don't be a hero ... this can cause major damage.

    • Load the SQL Management Studio
    • Expand the search database created in the earlier steps (typically WSS_Search_%hostname%)
    • Right click the database -> new query
    • Enter in the following Query:select * from msscrawlhostlist (execute)
You will be presented with a table of results including a column for Hostname and SuccessCount. SuccessCount increases as it indexes each page.
    • You can also lookup the crawl summary with:select * from MSSCrawlURLLog
    • And should there be any error codes in the MSSCrawlURLog, they can be referenced with:select * from MSSCrawlErrorList where ErrorID = '<ERRORID>'
If you run into issues where things are still not being crawled, i would suggest deleting the spCrawl and spSearch from SharePoint and Active Directory, re-creating them from scratch, repeating this entire process, and changing the "database" value in step "3". This will re-create the crawling database from scratch.
I hope it helpful to you!