Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 20 Current »

In this article you will find:

Goal

This article provides information on how to extend the indexing logic for Hawksearch V4

Prerequisite

Installed Connector - Installing the Connector

Register Custom Search Service

In order to use your custom search service instead of the built-in one you need to register it in the backend.

Please refer to this documentation - Register custom search service

Add External Data to the Index

  1. Add additional Fields to the index

The string type of the field in the code bellow is used as an example.

using Hawksearch.Search;
using System.Collections.Generic;
using System.Linq;
using Telerik.Sitefinity.Services.Search;

namespace SitefinityWebApp.Search
{
    public class CustomSearchService : HawksearchService
    {
        public override void CreateIndex(string sitefinityIndexName, IEnumerable<IFieldDefinition> fieldDefinitions)
        {
            var newFieldDefinition = Telerik.Sitefinity.Abstractions.ObjectFactory.Resolve<IFieldDefinition>();

            newFieldDefinition.Name = "your-custom-field-name";
            newFieldDefinition.Type = typeof(string);

            var definitions = fieldDefinitions.ToList();
            definitions.Add(newFieldDefinition);

            base.CreateIndex(sitefinityIndexName, definitions);
        }
    }
}

2. Add additional Fields to search Document

using Hawksearch.Search;
using System.Collections.Generic;
using Telerik.Sitefinity.Services.Search.Data;
using Telerik.Sitefinity.Services.Search.Model;
using Telerik.Sitefinity.Services.Search.Publishing;

namespace SitefinityWebApp.Search
{
    public class CustomSearchService : HawksearchService
    {
        public override void UpdateIndex(string name, IEnumerable<IDocument> documents)
        {
            var documentList = new List<IDocument>();

            foreach (var document in documents)
            {
                var fields = new List<IField>();
                fields.AddRange(document.Fields);

                var newField = new Field
                {
                    Name = "your-custom-field-name",
                    Value = "your-custom-field-value"
                };

                fields.Add(newField);

                var modifiedDocument = new Document(fields, document.IdentityField.Name);

                documentList.Add(modifiedDocument);
            }

            base.UpdateIndex(name, documentList);
        }
    }
}

  • No labels