You’ve got SharePoint installed. You’re generating content. Now you’d like it if that little Search bar on the top right actually returned something other than:
- Your search cannot be completed because this site is not assigned to an indexer. Contact your administrator for more information.
The first step is to turn on the Foundation Search Service. You do that with the following:
- Open Central Administration
- Go to System Settings -> Manage services on server
- Click on SharePoint Foundation Search
- Assign a service account to start the service (this is a managed account, so select on or add a new one)
- Assign a content access account (more on that below)
- Enter a database server and database name (or accept the defaults)
- Choose an indexing schedule
- Click Ok
- When you return to the Manage services on server page, click Start next to SharePoint Foundation Search
That’s only the first part, however. You’ve got the Search service running and the indexer on a schedule, but you actually have not yet identified what to index. In standard and enterprise version of search, you get a full blown service application and a lot of that configuration takes place there. However, that’s not the case with foundation search, so let’s continue.
The next thing that you need to do grant the content access account (that you entered above) read access to your applications. Do this:
- Go to Central Administration
- Go to Application Management -> Manage web applications
- Highlight the web application that you want foundation search to index
- Click User Policy in the ribbon
- In the Policy for Web Application box that appears, click Add Users
- Leave the Zone selection at (All zones), click Next
- In the Choose Users box, enter the username of the Content Access Account you used above when you configured SharePoint Foundation Search
- Check Full Read for permissions
- Click Finish
Alright. Now you have the indexer running and the content access account has privileges to read all of the content in your web application. But you still haven’t identified the content to crawl. That’s done at the content database level. So:
- Go to Central Administration
- Go to Application Management -> Manage Content Database Settings
- Click on the content database that contains the site(s)/site collection(s) that you want to index
- In the settings for that content database, in the section Search Server, use the drop down list to select the server with SharePoint Foundation Search service running
- Click OK.
Viola! You have turned on and set a schedule for indexing, granted permissions for the crawl account, and identified content to crawl. More than likely, you’re done. Based on the schedule that you created in the first part, and the amount of data that you need to crawl, you may need to wait a little while to check to see if everything is working.
In my case, it did not. The search box continually returned “no results” for anything that I typed in. So I turned to the Application Event Log and found this:
Log Name: ApplicationSource: SharePoint Foundation SearchLogged: <datetime>Event ID: 14Task Category: GathererLevel: WarningUser: <search service account>Computer: <sharepoint server>OpCode: InfoGeneral:The start address sts4s://<website address>/contentdbid={<guid of content db>} cannot be crawled.Context: Application ‘Search_index_file_on_the_search_server’, Catalog ‘Search’Details:Access is denied. Verify that either the Default Content Access Account has access to this repository, or add a crawl rule to crawl this repository. If the repository being crawled is a SharePoint repository, verify that the account you are using as “Full Read” permissions on the SharePoint Web Application being crawled. (0×80041205)
This was rather disheartening as the error message indicated that the fix was to do all of the things that I had already done. It turns out that the answer was hidden in the start address. You see, I had created the web application with <address1> and that was the Default address. I had then created a multitude of Custom addresses and was using one of those as the main address for the website <address2>. However, no matter how you are viewing the web page, the crawler will always use the Default address <address1>, but when you search the site while viewing it at <address2>, it cannot match them and the search engine returns “no results found”. I resolved the problem by changing around the Default and Custom zone access mappings in: Central Administration -> Application Management -> Configure alternate access mappings.
However, I also had Audit Failures for logons with the Content Access Account. After much gnashing of teeth and dead end searching, I stumbled upon this article: http://support.microsoft.com/kb/896861 which details a registry change that allows for loopback to a specific list of addresses. The details are at the link, but I will also include what I did below:
- Click Start, Click Run, type regedit, and then click Ok.
- In the Registry Editor, locate and then click on the following registry key: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0
- Right-click MSV1_0, point to New, and then click Multi-String Value.
- Type BackConnectionHostNames, and then press Enter.
- Right-click BackConnectionHostNames, and then click Modify.
- In the Value data box, type the host name or the host names for the sites that are on the local computer, and then click Ok.
- Quit Registry Editor, and then restart the IISAdmin Service
I included all of the alternate access mapping addresses in the list above.
My foundation search works fine now. I am able to query and return information for sites and sub-sites for all of the content databases that I’ve identified for indexing.
October 21st, 2011 at 12:16 pm
I have a question regarding this post – I am experiencing the same exact issue as you above. I am running foundation 2010 and search is not working. i get the errors in the application log just as you specifiy.. I have my default zone for the site configured as FBA and another zone configured as NTLM. the URL for the deafult zone seems to be the one that it wants to use to do the crawl but then it fails because it needs NTLM to execute the crawl. I am trying to figure out what to do inside of Alternate Access Mappings to get my main url (site.domain.com) to use a different zone configured for FBA and then set my search URL (sitesearch.domain.com) as the default zone with NTLM. when I attempted to do this using Edit Public URLs and just swapping them – then I couldnt log into either site – i would just get 401 unauthorized
Thanks,
Derek
October 21st, 2011 at 12:35 pm
Derek,
I poked around and it looks like you’ve posted in all of the usual places and it also seems like there’s not a lot of information out there. One of the problems with the Foundation search is that it’s NOT particularly configurable. You might look into the free Search Server Express 2010. It adds a search service application (similar to the search service applications you would find in the SharePoint Server and Enterprise versions) which IS fairly configurable. It ALSO adds the Secure Store service which leverages the ability to masquerade as other users in certain contexts.
I know that we have a couple of problems with search even now in our MOSS 2007 environment and it’s based on forms based authentication. It works, there’s just a handful of anomalies. (One being that the search results are built and displayed based on the crawler account, not on the user, so it’s not security trimmed properly.) We’ve actually made big strides here to integrate our authentication systems so that we can run 2010 in basic auth mode.