मैं एसडीएल ट्रिडियन 2011 (जीए) के लिए कस्टम सर्च इंडेक्सिंग हैंडलर के साथ खेल रहा था। मुझे very helpful information provided by Arjen का उपयोग करके कुछ काम मिल गया, हालांकि मुझे यकीन नहीं है कि मेरा निष्पादन सबसे अच्छा विकल्प है या नहीं।कस्टमाइज्ड ट्रिडियन सर्च इंडेक्स हैंडलर: पेज यूआरएल के लिए कस्टम बनाम मानक फ़ील्ड?
आवश्यकता यूआरएल द्वारा सीएमएस में पृष्ठों की खोज करने में सक्षम होना चाहिए (उदाहरण के लिए www.example.com/news/index.html)। ऐसा करने के लिए मैंने ISearchIndexingHandler
इंटरफ़ेस (नीचे कोड) का उपयोग करके एक कक्षा बनाई है। मैं आइटम के ContentText फ़ील्ड में यूआरएल अनुक्रमणित कर रहा हूं, हालांकि मुझे यकीन नहीं है कि इसमें आमतौर पर किसी पृष्ठ के लिए कुछ और होगा (मुझे लगता है कि एक पृष्ठ में केवल मेटाडेटा है इसलिए यह ठीक होना चाहिए)। एक कस्टम फ़ील्ड पर इसका उपयोग करने का लाभ यह है कि मैं आसानी से < यूआरएल > < फ़ील्डनाम > या ऐसा कुछ उपयोग किए बिना खोज बॉक्स में यूआरएल टाइप कर सकता हूं।
तो मेरा सवाल यह है कि, पेजों के लिए ContentText का उपयोग न करने का कोई कारण नहीं है, और क्या कस्टम फ़ील्ड का उपयोग करने में कोई फायदा है? ब्लूप्रिंटिंग को संभालने के तरीके पर अच्छे विचारों वाले किसी भी व्यक्ति के साथ बोनस अंक भी जाते हैं (यदि मैं अभिभावक प्रकाशन में कोई पृष्ठ बनाता हूं, तो मैं चाहता हूं कि स्थानीय यूआरएल को बाल प्रकाशनों में भी अनुक्रमित किया जाए), और जिस स्थिति में संरचना समूह पथ बदल दिया गया है (मुझे लगता है कि मैं किसी भी तरह से अपने इंडेक्सिंग हैंडलर के भीतर से बाल पृष्ठ वस्तुओं की पुन: अनुक्रमणिका ट्रिगर कर सकता हूं)।
कोड:
using System;
using Tridion.ContentManager.Search;
using Tridion.ContentManager.Search.Indexing.Handling;
using Tridion.ContentManager.Search.Indexing.Service;
using Tridion.ContentManager.Search.Indexing;
using Tridion.ContentManager.Search.Fields;
namespace ExampleSearchIndexHandler
{
public class PageUrlHandler : ISearchIndexingHandler
{
public void Configure(SearchIndexingHandlerSettings settings)
{
}
public void ExtractIndexFields(IdentifiableObjectData subjectData, Item item, CoreServiceProxy serviceProxy)
{
PageData data = subjectData as PageData;
if (data != null)
{
PublishLocationInfo info = data.LocationInfo as PublishLocationInfo;
string url = GetUrlPrefix(data) + info.PublishLocationUrl;
item.ContentText = url;
}
}
private string GetUrlPrefix(PageData page)
{
//hardcoded for now, but will be read from publication metadata
return "www.example.com";
}
}
}
एसजी प्रकाशित यूआरएल बदल गया है, तो केवल पुन: अनुक्रमणिका को ट्रिगर करने के बारे में अच्छा बिंदु - यह बड़ी साइटों के लिए कुछ भारी पुन: अनुक्रमण से बच सकता है। चूंकि एसजी का संस्करण नहीं है, मुझे लगता है कि ऐसा करने का एकमात्र तरीका इवेंट सिस्टम में है जैसा आपने कहा था। – Will
हां, आपका संपादन सही था। मेरा मतलब पृष्ठ के बजाय संरचना समूह है। –