Namespace: ITHit.WebDAV.Server.Search
The ISearchAsync type exposes the following members.
Name | Description | |
---|---|---|
Created |
Gets the creation date of the item in repository expressed as the coordinated universal time (UTC).
(Inherited from IHierarchyItemBaseAsync.) | |
Modified |
Gets the last modification date of the item in repository expressed as the coordinated universal time (UTC).
(Inherited from IHierarchyItemBaseAsync.) | |
Name |
Gets the name of the item in repository.
(Inherited from IHierarchyItemBaseAsync.) | |
Path |
Unique item path in the repository relative to storage root.
(Inherited from IHierarchyItemBaseAsync.) |
Name | Description | |
---|---|---|
CopyToAsync |
Creates a copy of this item with a new name in the destination folder.
(Inherited from IHierarchyItemAsync.) | |
DeleteAsync |
Deletes this item.
(Inherited from IHierarchyItemAsync.) | |
GetChildrenAsync |
Gets direct children of this folder.
(Inherited from IItemCollectionAsync.) | |
GetPropertiesAsync |
Gets values of all properties or selected properties for this item.
(Inherited from IHierarchyItemAsync.) | |
GetPropertyNamesAsync |
Gets names of all properties for this item.
(Inherited from IHierarchyItemAsync.) | |
MoveToAsync |
Moves this item to the destination folder under a new name.
(Inherited from IHierarchyItemAsync.) | |
SearchAsync |
Returns a list of items that correspond to a search request.
| |
UpdatePropertiesAsync |
Adds, modifies and removes properties for this item.
(Inherited from IHierarchyItemAsync.) |
Implement this interface on folders that suppoort search. When search request is recived the DavEngineAsync calls SearchAsync(String, SearchOptions, ListPropertyName, NullableInt64, NullableInt64) method.
If this interface is found on folder items, your server will include DASL: <DAV:basicsearch> header and SEARCH token in Allow header in response to OPTIONS requests. The WebDAV clients that support DASL search, including IT Hit Ajax File Browser, may rely on this header and token to display search user interface.
The code below is part of 'WebDAVServer.FileSystemStorage.AspNet' C# & VB samples provided with the SDK.
public async Task<PageResults> SearchAsync(string searchString, SearchOptions options, List<PropertyName> propNames, long? offset, long? nResults) { bool includeSnippet = propNames.Any(s => s.Name == snippetProperty); // search both in file name and content string commandText = @"SELECT System.ItemPathDisplay" + (includeSnippet ? " ,System.Search.AutoSummary" : string.Empty) + " FROM SystemIndex " + @"WHERE scope ='file:@Path' AND (System.ItemNameDisplay LIKE '@Name' OR FREETEXT('""@Content""')) " + @"ORDER BY System.Search.Rank DESC"; commandText = PrepareCommand(commandText, "@Path", this.dirInfo.FullName, "@Name", searchString, "@Content", searchString); Dictionary<string, string> foundItems = new Dictionary<string, string>(); try { // Sending SQL request to Windows Search. To get search results file system indexing must be enabled. // To find how to enable indexing follow this link: http://windows.microsoft.com/en-us/windows/improve-windows-searches-using-index-faq using (OleDbConnection connection = new OleDbConnection(windowsSearchProvider)) using(OleDbCommand command = new OleDbCommand(commandText, connection)) { connection.Open(); using(OleDbDataReader reader = command.ExecuteReader()) { while (await reader.ReadAsync()) { string snippet = string.Empty; if (includeSnippet) { snippet = reader.GetValue(1) != DBNull.Value ? reader.GetString(1) : null; // XML does not support control characters or permanently undefined Unicode characters. Removing them from snippet. https://www.w3.org/TR/xml/#charsets if (!string.IsNullOrEmpty(snippet) && invalidXmlCharsPattern.IsMatch(snippet)) { snippet = invalidXmlCharsPattern.Replace(snippet, String.Empty); } } foundItems.Add(reader.GetString(0), snippet); } } } } catch (OleDbException ex) // explaining OleDbException { context.Logger.LogError(ex.Message, ex); switch (ex.ErrorCode) { case -2147217900: throw new DavException("Illegal symbols in search phrase.", DavStatus.CONFLICT); default: throw new DavException("Unknown error.", DavStatus.INTERNAL_ERROR); } } IList<IHierarchyItemAsync> subtreeItems = new List<IHierarchyItemAsync>(); foreach (string path in foundItems.Keys) { IHierarchyItemAsync item = await context.GetHierarchyItemAsync(GetRelativePath(path)) as IHierarchyItemAsync; if (item == null) { continue; } if (includeSnippet && item is DavFile) (item as DavFile).Snippet = HighlightKeywords(searchString.Trim('%'), foundItems[path]); subtreeItems.Add(item); } return new PageResults(offset.HasValue && nResults.HasValue ? subtreeItems.Skip((int)offset.Value).Take((int)nResults.Value) : subtreeItems, subtreeItems.Count); }