- Step 1 adapt your aspx
- Step 2 index your pages
- Step 3 install and configure
- Step 4 search with the Sitecore API
Here is an example of class to execute some search with dtsearch.
You can download it here
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.UI;
using Sitecore;
using Sitecore.Configuration;
using Sitecore.Diagnostics;
using Sitecore.Modules.dtSearch;
using Sitecore.Modules.dtSearch.Core;
using dtSearch.Engine;
using Sanitec;
using System.Xml.Linq;
using System.Text.RegularExpressions;
using Sitecore.Data.Items;
using System.IO;
namespace QuickSearch
{
/// <summary>
/// Can be used to avoid duplicate records
/// </summary>
public class SearchResultContentComparer : IEqualityComparer<SearchResultContent>
{
#region IEqualityComparer<SearchResultContent> Members
public bool Equals(SearchResultContent x, SearchResultContent y)
{
return x.Url == y.Url
|| (!String.IsNullOrEmpty(x.ScProduct) && x.ScProduct == y.ScProduct);
}
public int GetHashCode(SearchResultContent obj)
{
return obj.Url.GetHashCode();
}
#endregion
}
public class SearchResultContent
{
private Item sitecoreItem = null;
/// <summary>
/// The corresponding sitecore item
/// </summary>
public Item SitecoreItem
{
get
{
//Handle the MediaItem item documents
Regex reg = new Regex("^.*?/~/media/(.*?).ashx");
Match match = reg.Match(Url);
if (!match.Success)
{
sitecoreItem = Sitecore.Context.Database.GetItem(ScID);
}
else
{
string path = "/sitecore/media library/" + match.Groups[1];
sitecoreItem = Sitecore.Context.Database.SelectSingleItem(path);
}
return sitecoreItem;
}
}
public string ScID { get; set; }
public string Title { get; set; }
public string Url { get; set; }
public string Synopsis { get; set; }
public string Score { get; set; }
public string ScProduct { get; set; }
public string ScLang { get; set; }
}
public class QuickSearchContent
{
public string Sitename { get; set; }
private string nameIndexDtSearch()
{
string dtSearchIndex = "dtSearchIndexName_" + Sitename;
return Sitecore.Configuration.Settings.GetSetting(dtSearchIndex);
}
private string pathIndexDtSearch()
{
string dtSearchIndexFolder = "dtSearchIndexFolder_" + Sitename;
return Sitecore.Configuration.Settings.GetSetting(dtSearchIndexFolder);
}
/// <summary>
/// The sitename must correspond to the settings dtSearch.config
/// dtSearchIndexFolder_[sitename]
/// dtSearchIndexName_[sitename]
/// </summary>
/// <param name="sitename">The sitename must correspond to the settings dtSearch.config</param>
public QuickSearchContent(string sitename)
{
Sitename = sitename;
}
/// <summary>
/// Return the results
/// </summary>
/// <param name="query">The words to search for</param>
/// <returns>the results</returns>
public List<SearchResultContent> LoadResults(string query)
{
List<SearchResultContent> results = new List<SearchResultContent>();
if (!string.IsNullOrEmpty(query))
{
XDocument searchResults = XDocument.Load(new XmlNodeReader(GetXmlResults(query)));
results = (from XElement node in searchResults.Descendants("item")
select new SearchResultContent
{
ScID = (node.Element("scID") == null ? String.Empty : node.Element("scID").Value),
ScProduct = (node.Element("scProduct") == null ? String.Empty : node.Element("scProduct").Value),
ScLang = (node.Element("scLang") == null ? String.Empty : node.Element("scLang").Value),
Score = node.Attribute("score").Value,
Title = node.Element("title").Value,
Url = node.Element("url").Value,
Synopsis = node.Element("synopsis").Value
}).ToList();
}
return results;
}
private dtSearchEngine your_dtSearch;
/// <summary>
/// Initialize DTsearch
/// </summary>
/// <param name="query">The words to search for</param>
/// <returns>An XmlDocument with the results</returns>
private XmlDocument GetXmlResults(string query)
{
ISearch engine = dtSearchFactory.CreateSearchEngine();
Assert.IsNotNull(engine, "Cannot create the dtsearch engine the 'dtSearchIndexName' key in the web.config may be incorrect");
// Get the dtSearch engine implementation
your_dtSearch = engine as dtSearchEngine;
Assert.IsNotNull(your_dtSearch, "Cannot cast the engine to dtSearchEngine");
// Set index
string pathIndex = pathIndexDtSearch() + nameIndexDtSearch() + "\\";
Assert.IsTrue(System.IO.Directory.Exists(pathIndex), "Could not find the directory: " + pathIndex);
your_dtSearch.Index = pathIndex;
// Execute search
your_dtSearch.Search(query, Sitecore.Modules.dtSearch.Core.Constants.Options.WildCards | Sitecore.Modules.dtSearch.Core.Constants.Options.AllWords);
// Get search results as XML
return engine.SearchResults;
}
}
}
Usage of this class:
QuickSearchContent qsc = new QuickSearchContent("YourSite");
var results = qsc.LoadResults("Your Query");
Thanks for this information. Since you have some more experience in .NET I found some ways in which I can improve my code for next time use when needed!
ReplyDelete