Customized the Search result page template
Hi,
Can i modify the the result page and add thumbnail for each search result in sitefinity 4.3.?
Please help.
Thanks
Hi Shalaka,
Could you please elaborate about the thumbnail bit? If you have News search results what kind of thumbnails will you display? Please give us more details on the matter.
Greetings,Hi,
I want to create a search result page which will show the news search result along with the news thumbnail field.
Currently the search result page shows URL and news heading. I want to show custom fields also.
Is it possible?
Please help.
Thanks.
Hi Shalaka,
Please review the following blog posts related to the search:
http://www.sitefinity.com/blogs/teodorgeorgiev/posts/11-11-14/search_index_with_custom_fields_in_sitefinity_4.aspx
http://www.sitefinity.com/blogs/teodorgeorgiev/posts/11-09-07/adding_a_new_content_type_to_search.aspx
http://www.sitefinity.com/blogs/ivanpelovski/posts/11-08-16/registering_custom_pipes_in_sitefinity.aspx
I hope this helps.
i refereing to this post given by you - p://www.sitefinity.com/blogs/teodorgeorgiev/posts/11-11-14/search_index_with_custom_fields_in_sitefinity_4.aspx
Where should i write this code.
I have created one custom filed in news. and i want to add that filed in search result.
I need both the cases
1 . Want to search based on the custom field
2.. want to search on default fields and show the custom field in search result page.
Please help
Thanks.
Hi,
I have created a new project called 'CustomSearch' and added following three classes in that .
I have created dll of this customsearch and added in my sitefinitywebsite. Then i created a provider by specifying type as " CustomSearch.LuceneSearchProviderNew" and change my default search provder name to "CustomSearch"
I am getting 'Exception Throwsw By The Target Of Invocation' error while doing reindexing.
and the attached error while doing search from frontend.
Please see the code and help.
1) ContentInboundPipeNew.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Telerik.Sitefinity.Publishing.Pipes;
using Telerik.Sitefinity.Publishing;
using Telerik.Sitefinity.Publishing.Translators;
using Telerik.Sitefinity.Services.Search.Publishing;
namespace CustomSearch
public class ContentInboundPipeNew : ContentInboundPipe
public override Telerik.Sitefinity.Publishing.Model.PipeSettings PipeSettings
get
var settings = base.PipeSettings;
var mappings = settings.Mappings.Mappings;
var customField = "TestSearch";
var customFieldMapping = PublishingSystemFactory.CreateMapping(customField, ConcatenationTranslator.TranslatorName, true, customField);
if(!mappings.Contains(customFieldMapping))
mappings.Add(customFieldMapping);
return settings;
set
base.PipeSettings = value;
public class SearchIndexOutboundPipeNew : SearchIndexOutboundPipe
public override Telerik.Sitefinity.Publishing.Model.PipeSettings PipeSettings
get
var settings = base.PipeSettings;
var mappings = settings.Mappings.Mappings;
var customField = "TestSearch";
var customFieldMapping = PublishingSystemFactory.CreateMapping(customField, ConcatenationTranslator.TranslatorName, true, customField);
if (!mappings.Contains(customFieldMapping))
mappings.Add(customFieldMapping);
return settings;
set
base.PipeSettings = value;
2 ) LuceneCustomResultSet.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Telerik.Sitefinity.Services.Search.Data;
using System.IO;
using Telerik.Sitefinity.Utilities.Lucene.Net.QueryParsers;
using Telerik.Sitefinity.Utilities.Lucene;
using Telerik.Sitefinity.Publishing.Model;
using Telerik.Sitefinity.Abstractions;
using Telerik.Sitefinity.Utilities.Lucene.Net.Search;
using System.Globalization;
using Telerik.Sitefinity.Services.Search;
using Telerik.Sitefinity.Utilities.Lucene.Net.Index;
namespace CustomSearch
public class LuceneCustomResultSet : LuceneResultSet
public LuceneCustomResultSet(LuceneSearchProvider provider, string catalogueName, string query, params string[] orderBy)
: this(provider, catalogueName, query, 0, 0, orderBy)
string catalogueName = String.Empty;
public LuceneCustomResultSet(LuceneSearchProvider provider, string catalogueName, string query, int skip, int take, params string[] orderBy)
: base(provider, catalogueName, query, 0, 0, orderBy)
this.catalogueName = catalogueName;
this.query = query;
protected override void ExecuteQuery(bool tryToFix = true)
try
var path = ((LuceneSearchProvider)SearchManager.GetManager("").Provider).GetCataloguePath(catalogueName);
if (System.IO.Directory.Exists(path))
var defautlOperator = QueryParser.AND_OPERATOR;
var analyzer = this.GetAnalyzer();
var parser = new MultiFieldQueryParser(new string[] "Title", "Content", "TestField" , analyzer);
parser.SetDefaultOperator(defautlOperator);
//query = QueryParser.Escape(query);
if (searcher != null)
searcher.Close();
searcher = new IndexSearcher(path);
Query queryObj = searcher.Rewrite(parser.Parse(query));
Query = queryObj;
//Search only for current language
if (AppSettings.CurrentSettings.Multilingual == true)
TermQuery languageQuery = new TermQuery(new Term("Language", CultureInfo.CurrentUICulture.Name));
TermQuery languageNullQuery = new TermQuery(new Term("Language", SearchProvider.FieldNullValue));
BooleanQuery filterQuery = new BooleanQuery();
filterQuery.Add(languageQuery, BooleanClause.Occur.SHOULD);
filterQuery.Add(languageNullQuery, BooleanClause.Occur.SHOULD);
QueryFilter languageFilter = new QueryFilter(filterQuery);
this.hits = searcher.Search(queryObj, languageFilter);
else
this.hits = searcher.Search(queryObj);
for (var iter = 0; iter < this.HitCount; iter++)
var doc = this.hits.Doc(iter);
catch (Exception ex)
if (tryToFix && ex is ParseException)
this.query = this.TryFixQuery(this.query);
this.ExecuteQuery(false);
else
this.error = ex;
this.hits = null;
private Exception error;
private string query;
private IndexSearcher searcher;
public void Dispose()
if (this.searcher != null)
this.searcher.Close();
this.searcher = null;
3) LuceneSearchProviderNew.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Telerik.Sitefinity.Data;
using Telerik.Sitefinity.Services.Search.Data;
namespace CustomSearch
class LuceneSearchProviderNew : LuceneSearchProvider
public override IResultSet Find(string catalogueName, string query, int skip, int take, params string[] orderBy)
return new LuceneCustomResultSet(this, catalogueName, query, skip, take, orderBy);
public override IResultSet Find(string catalogueName, string query, params string[] orderBy)
return new LuceneCustomResultSet(this, catalogueName, query, orderBy);
Hello Shalaka,
Please make your "LuceneSearchProviderNew" class public. This is what causes this exception.
Greetings,Thanks.
It is working fine.