Enabling search on listitems in Sharepoint Portal Search.
Last week we wanted to perform a search on the AssignedTo column in the tasks list on WSS sites and area’s. Our goal was to create a custom webpart which would display ALL tasks anywhere in the portal which were assigned to the current user.
To my horror I could not get the listitems I used the AssignedTo column in to appear in the advanced search results. Sure…I could tell it to show up in the dropdownboxes on Sharepoints Advanced Search Page but any query performed on it turned up empty.
When I investigated this problem further I noticed two disabled checkboxes in the ‘Exclude and Include content’ screens for the Non_Portal_Content and Portal_Content indexes.
These checkboxes were ‘Allow alerts from individual Sharepoint list items’ and ‘Crawl individual Sharepoint list items’. Wait….did it just say ‘CRAWL individual list items’?
That must be the reason I cannot get my task from the search page!
Now we need to figure out how we can get this option to be enabled so I can select it.
I found out that Microsoft disabled this by default because if you are having a portal with thousands of list and you are going to index every listitem…your search indexes will become huge. But in our scenario, we don’t care about that and want to index those items!
This is how:
On the ‘Exclude and include content for Non_Portal_content’ page you will see something like this by default:
Where ‘ws2k3net2k3’ is your registered portal url.
Sharepoint automatically created these include and exclude rules for you and the only way to enable the checkboxes described above is to recreate these rules.
Because we want to include more information in our indexes we do not need to recreate the Excluded rules.
So do the following:
- delete the http://w2k3net2k3/* rule.
- Create a new rule
- Type the same path the rule you just deleted had (in this case http://w2k3net2k3/*)
- Select:
- Include complex URLs
- Allow alerts for individual Sharepoint list items
- Crawl individual Sharepoint list items
Repeat steps 1 to 4 for the Portal_Content index.
Rebuild your content indexes and you should now be able to look for individual list items!
Addition 30-12-2005:
An example query on search.asmx could be:
<?xml version=”1.0″ encoding=”utf-8″ ?>
<QueryPacket Revision=”1000″>
<Query domain=”QDomain”>
<SupportedFormats>
<Format>urn:Microsoft.Search.Response.Document.Document</Format>
</SupportedFormats>
<Context>
<QueryText language=”en-US” type=”MSSQLFT”>
<![CDATA[
SELECT “DAV:displayname”,
“DAV:href”,
“urn:schemas-microsoft-com:office:office#Author”
FROM (TABLE non_portal_content..scope()
UNION ALL TABLE portal_content..scope() )
WHERE
CONTAINS (“urn:schemas-microsoft-com:office:office#ows_AssignedTo”, ‘”admin*”‘) ]]>
</QueryText>
</Context>
</Query>
</QueryPacket>
(This searches for all AssignedTo columns which contain the string ’admin’)