I have a requirement to develop search features in DD4T Web applications using Amazon cloud search. I have few questions related to this.

  1. What is the best way to index the component data (Mostly articles), I thought using TBB/Eventing System.
  2. Can we use SI4T TBBs to Generate Index data, then Write custom class library to push index data to Amazon cloud search ?. the reason why i am asking this because SI4T expects Indexer implementation which should be written in JAVA, which we i am not familiar with it.
  3. I have used SI4T TBBS, i am not sure how to generate required fields for index data, now it's generating following output

      <body>All Component content in Text</body>
      <custom />

above code contains body fiel, which contains all component content as text. but i want to know, how to customize the output to include other fields of the component such as (Article Header, Author, Summary). Then once i get all the field i can push to amazon cloudsearch (Without using any storage extension, am i right ?).

Please help me proceed further, any inputs are welcome :)

2 Answers 2

  1. The SI4T architecture is designed for this kind of integration, and is a much more solid approach than using TBBs (you cannot, for example control unpublishing from a TBB) or Event System (you cannot make indexing and publishing part of the same transaction from events).

  2. If you are more comfortable working with .NET you could write the integration as a .NET web service and call this from a lightweight Java indexer implementation (you can use the Solr indexer as a good example).

  3. There is a lot of information on customizing the index data and field mapping on the SI4T wiki and in this blog post.

Good luck with it and please share your experiences!

  • Is it mandatory to use java for indexer ? cant we use .net ?
    – Ravi Gadag
    Jan 20, 2015 at 11:37
  • Yes - the Deployer storage layer is Java only.
    – Will Price
    Jan 20, 2015 at 11:50
  • Using TBBs also breaks transactionality of publishing and will result in state mismatches between data in your search index and publish state in Tridion; for this reason I would always advise to go the SI4T route as this is SI4T's raison-d'etre Jan 21, 2015 at 14:29

Coincidentally I have just completed a proof of concept doing exactly this last week. My client is in the process of moving to Microsoft Azure, and replacing out existing GSA (Google Search Appliance) with Azure Search. They also have a hard “No Java Development” requirement.

The POC makes some use of Si4T by using the TBBs which generate the indexing data for text based content, but we don’t extend the Deployer. We have enabled Change Tracking in the Binary_Content, Page_Content and ComponentPresentation tables of the Broker database. This is done running a few queries on the Broker Database as described here:

After setting up Change Tracking, we have written a Window Service (based on the code in the above link) which monitors the Change Tracking tables every 5 seconds for changes. This is written 100% in .NET. This service uses the .NET API to retrieve the items (Pages, DCP and Binaries) and push the relevant data into the Azure Search Catalogs. For Binaries we are extracting text content from ZIP files, MS Office documents and PDFs using the .NET build of Apache Tika (http://kevm.github.io/tikaondotnet/).

The code is still in a POC stage while we do more testing (and perform evaluation of Azure Search while it is still in preview), but it works pretty well, and we should be “productionizing” it starting in April. At which point I plan to make it an open source project. If you decide to go in a similar direction, let me know, and maybe we can collaborate a little.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.