More in this section

Forums / Developing with Sitefinity / Customized the Search result page template

Customized the Search result page template

8 posts, 1 answered
  1. Shalaka
    Shalaka avatar
    50 posts
    Registered:
    24 Mar 2011
    11 Jan 2012
    Link to this post
    Hi,
    Can i modify the the result page and add thumbnail for each search result in sitefinity 4.3.?

    Please help.
    Thanks

  2. Lubomir Velkov
    Lubomir Velkov avatar
    688 posts
    Registered:
    03 Nov 2014
    13 Jan 2012
    Link to this post
    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,
    Lubomir Velkov
    the Telerik team
    Do you want to have your say in the Sitefinity development roadmap? Do you want to know when a feature you requested is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
  3. Shalaka
    Shalaka avatar
    50 posts
    Registered:
    24 Mar 2011
    13 Jan 2012
    Link to this post
    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.
  4. Lubomir Velkov
    Lubomir Velkov avatar
    688 posts
    Registered:
    03 Nov 2014
    16 Jan 2012
    Link to this post
    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.

    All the best,
    Lubomir Velkov
    the Telerik team
    Do you want to have your say in the Sitefinity development roadmap? Do you want to know when a feature you requested is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
  5. Shalaka
    Shalaka avatar
    50 posts
    Registered:
    24 Mar 2011
    20 Jan 2012
    Link to this post
    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.
  6. Shalaka
    Shalaka avatar
    50 posts
    Registered:
    24 Mar 2011
    23 Jan 2012
    Link to this post
    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);
    }

    }
    }
  7. Lubomir Velkov
    Lubomir Velkov avatar
    688 posts
    Registered:
    03 Nov 2014
    24 Jan 2012
    Link to this post
    Hello Shalaka,

    Please make your "LuceneSearchProviderNew" class public. This is what causes this exception.

    Greetings,
    Lubomir Velkov
    the Telerik team
    Do you want to have your say in the Sitefinity development roadmap? Do you want to know when a feature you requested is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
    Answered
  8. Shalaka
    Shalaka avatar
    50 posts
    Registered:
    24 Mar 2011
    02 Feb 2012
    Link to this post
    Thanks.
    It is working fine.


8 posts, 1 answered