First you should create a new scope
Goto:
Shared Services Administration: SharedServices1 > Search Settings
View scopes
New scopes
The rule you need to define a scope that will only search sites is
contentclass = STS_Web
I called mine JustSite, very creative.
Now go back to your regular site
Home > Site Settings > Scopes > View Scopes
On this page you wish to enable your new scope.
Now you can use the code below to search your entire farm for a single site. All returns will be sites, and nothing but sites.
string
query = @"SELECT Title, Url FROM SCOPE() WHERE 'Scope'= 'JustSite' AND FREETEXT('Sitename') ";
using (SPSite site = new SPSite(GlobalSettings.Instance.BASESHAREPOINTURL)) {
KeywordQuery q = new KeywordQuery(site);
FullTextSqlQuery qry = new FullTextSqlQuery(site);
qry.ResultTypes = ResultType.RelevantResults;
qry.EnableStemming = true;
qry.TrimDuplicates = true;
qry.QueryText = query;
ResultTableCollection results = qry.Execute();
ResultTable resultTable = results[ResultType.RelevantResults];
}