Annoying Navigation in Search Centers

I had two of my colleagues come to me with the same complaint – that the Basic Search Center site template in SharePoint 2010 doesn’t have any navigation to get ‘back’ to the rest of the site collection:

I pointed out to them that there are good reasons to consider having the Search Center separated from the rest of your content. I’d even suggest a separate Site Collection if using the Enterprise Search Center. (This uses the publishing features, and you might not want them turned on in your existing site collection).

However, my colleagues didn’t need all that, and really did just want a simple search center in the same site collection as their content. For example, a departmental site collection needed its own search center and search experience. But they’d really like users to be able to navigate back to the rest of the site collection.

So, I set forth to fix this dire state of affairs for them. Continue reading

SharePoint Search – AuthzInitializeContextFromSid failed

I’d a really, really weird problem with a customer yesterday. We’d set up their SharePoint search. Indexing seemed to be working correctly, and when I logged in as an administrator, I was getting search results correctly. However, logged in as a normal – though very highly privileged – user my search results were missing! This was some thing of a surprise. It felt like security trimming, but the user was a Site Collection admin, and had Full Control throughout the entire main content web application. Also, we were indexing content off the network file share, and we knew he could access both the SharePoint Content.

However, when he ran a search, he didn’t get any search results. That sucked. I tried another user account – and had the same problem.

Eventually, I looked in the logs and found the following message:

AuthzInitializeContextFromSid failed with ERROR_ACCESS_DENIED. This error indicates that the account under which this process is executing may not have read access to the tokenGroupsGlobalAndUniversal attribute on the querying user’s Active Directory object. Query results which require non-Claims Windows authorization will not be returned to this querying user.

Continue reading

Relating BDC entities for Search Indexing?

I think I might have come across a problem with using the BDC to index entity data in legacy systems. I’m sure I can’t be the first person to have hit this problem, but I can’t find a solution. Thus, I thought I’d blog it so other folks might be aware of it, and to open the problem up to suggestions.

I’m not sure I can describe the system I’m actually working on, so I’m going to use a slightly contrived example… Continue reading

SharePoint can have Wildcard searching…

One of the most popular blog post on my site is, curiously, about the lack of wildcard searching in SharePoint out of the box. This, as it happens, is a bit of a simplification, and I’d like to be a bit clearer – even if it is more complicated.

  • Out of the box SharePoint does not have a way of searching for “App*” and getting all results such as “Apple”, “Application”, and so on. This is the wildcard search I was on about before.
  • You can do a wildcard search on a particular metadata property. “Title:App*” would return items with a title that contained “Apple”, “Application”, and so on. The down side is, you have to know the property you want to search on, and you have to know its name, which isn’t always easy or viable for users.
  • SharePoint Search service does actually support wildcard searching – just there is no way of using it with the out of the box controls. Essenially, it’s a problem of the user interface. The search service supports 3 different ways of querying it. This is why Corey Roth wrote his wildcard search webpart (on codeplex), and I’m sure there are others. He explains why he wrote it here,  and what you give up by using Full Text SQL queries.

So, in short, if you’re able to do some custom development (or use Corey’s web part), and if you’re willing to trade off some other areas of functionality, you can get wildcard searching – but it’s not just out-of-the-box.

All of this is explained in ‘Inside the Index and Search Engines: Microsoft Office SharePoint Server’ by Tisseghem and Fastrup. I highly recommend it for developers working with Search.

Contextual Search Results Page Redirection via HTTPModule

So, I’m continuing my efforts at finding a way to handling Contextual Searching.

To describe the issue again, SharePoint allows you to search ‘This List’ or ‘This Site’. Unfortunately, these searches always show the ‘OSSSearchResults.aspx’ results page, which is built into SharePoint, can’t be modified, and this means that you can’t use your normal ‘Search Center’ experience, which is usually modified and optimized for your users.

This is a shame, so I’ve been looking at ways of overcoming this problem. Continue reading

Contextual Searching Via Search Box AppendQueryTerms

I’ve been looking at using the Search Box web part for a light-weight contextual search.

SharePoint allows you to search ‘This List’ or ‘This Site’. Unfortunately, these searches always show the ‘OSSSearchResults.aspx’ results page, which is built into SharePoint, can’t be modified, and this means that you can’t use your normal ‘Search Center’ experience, which is usually modified and optimized for your users.

You can add a ‘context’ to a search with some of the search query terms. “Site:http://example/sites/docs” for example would restrict results to those below that URL. So, is there any way we can add that to our query? Continue reading

Declaratively Point a Site Collection at a Search Center

Yesterday I wrote about the SmallSearchInputBox, how scopes only appear if you set a search center for the site collection, and how to set the Search Center in code.

Well, as is typically the way with CAML, I figured out how to do this declaratively later. Or, more specifically, I found that there is a feature I could call declaratively that would do what I want:

search-center-url-feature

<!-- SearchCenter Url feature -->
<Feature ID="7AC8CC56-D28E-41f5-AD04-D95109EB987A" >
<Properties xmlns="http://schemas.microsoft.com/sharepoint/">
<Property Key="SearchCenterUrl" Value="~SiteCollection/Search/" />
</Properties>
</Feature>

Yup, all I need to do is put that into my site definition…

Programmatically configure the Small Search Box to show scopes

Sharepoint’s ‘ordinary’ sites, such as Team Sites or Blank Sites, have a small search box (the SmallSearchInputBox) at the top which does not show search scopes, as we would be used to in a Collaboration Portal, for example…

search-blank-site-default

The reason for this is that they are not, by default, pointed at a particular Search Center – so they don’t have any idea what scopes to show. However, you can set this through the Site collection Search Settings…

search-site-collection-settings

And suddenly, your search scopes appear! Hurrah!

search-blank-site-now-with-scopespng

Now, what if we are creating a bunch of site collections? (Our current project could create quite a lot of site collections. And we need them created automatically, as required). Can we point them to a specific search center automatically? Continue reading

Programmatically create pages – and Add Web Parts

I had an interesting problem recently with a Site Definition. I was trying to create a publishing page, which would not create as the correct content type. I still haven’t got to the bottom of why.

However, time was limited, and we were going to have to create a feature receiver to staple to our site definition anyway, so I had a look at creating a publishing page programmatically.

We needed a feature receiver as the customer wanted the home page of their site to have a ‘Search Box’ which would ‘Search this site’, but go to a custom results page in a Search Center. My plan was to use a Search Box Web part, configured to go to a custom results page, and to append the query term:

site: [url to site]

e.g. site:http://sharepoint/finance/

Naturally, you don’t know the URL of the site until the site has been created – so this web part would have to be created programmatically. Continue reading

No federated searching of Google…

I’d a question from a customer:

I’ve installed the updates on our dev server and I’m playing around with the [federated] search, I don’t suppose you know if there is a Google connector for the search? Or is there coding involved to get the Google search results?

That seemed funny to me – Google not presenting results in XML? Well, apparently not. Google do not appear to provide an OpenSearch XML results service – at least, not for general search. Curiously, Blogs and News searches do.

There was a SOAP API that could’ve been used, but they are no longer issuing developer keys. Looks like they’re closing it down.

The best solution I can find – several suggestions of creating an intermediate web service to parse standard page requests. Which was the line I was thinking down anyway (I love regexes – which is a bit freaky. They’re like Sudoku, but fun!)

I do think it’s strange that Google don’t offer an XML service – I do get why; they make their money from advertising. But the competition offer it; my reply to my customer did end with ‘Or you could just use Live Search’.