Wednesday 12 February 2020

Adobe Search and Promote [S&P]


Follow the below steps in order to configure S&P for Flexible templates.
Assumption:
Current Project already have schedular which generates updated xml file and place it in publicly accessible location (Eg: /content/dam in Publish server)
Format Example for XML:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<records timestamp="Tue Feb 11 11:16:00 IST 2020" version="1.0">
                   <record>
                                      <pageID><![CDATA[21d90897]]></pageID>
                                      <url><![CDATA[/ua/en/blog/blog-collection-demo-page/2019/test-coll.html]]></url>
                                      <title><![CDATA[Test-Coll]]></title>
                   </record>
</records>

Step 1) Add Metadata Definitions

To add entries of new introduced properties coming in xml
  • Navigate to Settings -> Metadata -> Definitions


  • Click on ‘Add field’ and add entries for all new fields, by entering same property name in ‘Field Name’ and ‘Meta Tag Name’ and keep other fields values same as below.


Note: Some of them should be already present there, but added here to re-check again
1)      url                       [Should be existing system defined field, re-check]
2)      title                     [Should be existing system defined field, re-check]
3)      Field Name        : pageID
Meta Tag Name : pageID
Data Type          : Text
Relevance          : 1- Low
Sorting               : Ascending



Step 2) Add Index Connector

Add Index Connector for each locale xml file   
Navigate to: Settings -> Crawling -> Index Connector

Here we should have entries for each MF xml files
If already present Edit else, click on Copy and give new name specific to MF which is not configured yet.
Eg: For US/EN MF, can keep name as feed_file_US_EN

  • Check all record (fields) which needs be to index from XML file and was configured in Step 1 for metadata definitions
If any fields missing add it [by clicking on + icon present in bottom of Action column] and click on ‘Save Changes’ button present at bottom
Format Example: For title field add below details
Tag: /record/title
Field: title
Metadata: mark it as checked





Step 3) Add URL Entrypoints

Add entry for all xml file name created in index connector
In format:
index:<index-connector-name>








Step 4) Add Facets

  • Navigate to Design -> Navigation -> Facets


  • Click on ‘Add Facet’ button and add entries for each individually
a.       event-type
b.       event-sub-type
For each follow below steps
Eg: To add event-type
Facet name         : Select event-type from dropdown
Display Label       : event-type
Sort                     : alpha
And click in ‘Save Changes’ button
                                 

Step 5) Add new Presentation Template



a.       Navigate to: Design->Templates
b.     Click “Add Template
c.      File Name: json_events.tmpl
d.       Click “Add
e.       Edit the new template
f.        Paste the following code and post that Click “Save Changes

<guided-content-type-header content="text/javascript" />
<guided-if-query-param-defined gsname="callback">
    <guided-query-param gsname="callback" />
    (
</guided-if-query-param-defined>
{ "general" : {
"total" : "<guided-results-total />",
"lower" : "<guided-results-lower />",
"upper" : "<guided-results-upper />",
"q" : "<guided-query-param gsname='q' />"
},
"breadcrumb" : [
<guided-breadcrumb>
    {
    "name" : "<guided-breadcrumb-label>",
    "breadcrumb-remove-item" : {
    "link" : "<guided-breadcrumb-path gsname='remove'>",
    "value" : "<guided-breadcrumb-value />"
    },
    "breadcrumb-goto-item" : {
    "link" : "<guided-breadcrumb-path gsname='goto'>",
    "value" : "<guided-breadcrumb-value />"
    }
    }
    <guided-if-not-last>,</guided-if-not-last>
</guided-breadcrumb>
],
"pagination" : {
"total-pages" : "<guided-page-total />",
"pages" : {
"First" : "<guided-page-path gsname='first' />",
"Last" : "<guided-page-path gsname='last' />",
<guided-if-page-prev>
    "Previous" : "<guided-page-path gsname='prev' />",
</guided-if-page-prev>
<guided-if-page-next>
    "Next" : "<guided-page-path gsname='next' />",
</guided-if-page-next>
<guided-if-page-viewall>
    "viewall" : "<guided-page-path gsname='viewall' />",
</guided-if-page-viewall>
<guided-if-page-viewpages>
    "viewpages" : "<guided-page-path gsname='viewpages' />",
</guided-if-page-viewpages>
"pages" : [
<guided-pages>
    {
    <guided-if-page-selected>
        "position" : "<guided-page-number />" ,
        "page-path" : "<guided-page-path />" ,
        "selected" : "true"
        <guided-else-page-selected>
        "position" : "<guided-page-number />" ,
        "page-path" : "<guided-page-path />" ,
        "selected" : "false"
    </guided-if-page-selected>
    }
    <guided-if-not-last>,</guided-if-not-last>
</guided-pages>
]
}
},
"facets" : [
<guided-facet gsname="event-type">
    {
    "name" : "event-type",
    "values" : [ 
    <guided-facet-values>
        { 
        <guided-if-facet-value-selected>"selected" : true, </guided-if-facet-value-selected>
        "label" : "<guided-facet-value escape='ijson'>",
        "link" : "<guided-facet-value-path />",
        "q1" :  "<guided-facet-value escape='ijson'/>",
        "count" : "<guided-facet-count>"
        <guided-if-facet-value-selected>
            ,"undolink" : "<guided-facet-value-undo-path />"
        </guided-if-facet-value-selected>
        }
        <guided-if-not-last>,</guided-if-not-last>
    </guided-facet-values>
    ]
    }
</guided-facet>
<guided-if-facet-has-values [gsname="event-sub-type"]>,</guided-if-facet-has-values>
<guided-facet gsname="event-sub-type">
    {
    "name" : "event-sub-type",
    "values" : [ 
    <guided-facet-values>
        { 
        <guided-if-facet-value-selected>"selected" : true, </guided-if-facet-value-selected>
        "label" : "<guided-facet-value escape='ijson'>",
        "link" : "<guided-facet-value-path />",
        "q1" :  "<guided-facet-value escape='ijson'/>",
        "count" : "<guided-facet-count>"
        <guided-if-facet-value-selected>
            ,"undolink" : "<guided-facet-value-undo-path />"
        </guided-if-facet-value-selected>
        }
        <guided-if-not-last>,</guided-if-not-last>
    </guided-facet-values>
    ]
    }
</guided-facet>
],
"results" : [
<guided-results gsname="default">
    {
    "index" : "<guided-result-index />",
    "url"   : "<guided-result-field gsname='loc' escape='ijson' />",
    "title" : "<guided-result-title />",   
    "pageID" : "<guided-result-field gsname='pageID' escape='ijson' >",
        }
    <guided-if-not-last>,</guided-if-not-last>
</guided-results>
]
}
<guided-if-query-param-defined gsname="callback">)</guided-if-query-param-defined>


Step 6) Add Pre-Search Rule       


  
a.      Navigate to: Rules->Pre-Search Rules
b.     Click “Add Rule
c.      Fill out:
                                        i.     Name: Json Events Template
                                      ii.     query parameter – do – equal - value - eventjson
                                     iii.     set - targeted template to - json_events
                                     iv.     Click “Save Changes


Step 7) Add Transport Template

·       

      Navigate to: Design->Templates
·       Click Edit icon of file json.tpl
·       Copy the content and take backup in local file system
·       Replace all existing content with below mentioned code and post that Click “Save Changes”


<search-content-type-header charset="UTF-8" />
{
                   "general":
                   {
                                      "total" : "<search-total />",
                                      "lower" : "<search-lower />",
                                      "upper" : "<search-upper />",
                                      "rbt-trigger-list" : "<search-rbta-trigger-id-list>",
                                      "fields" :
                                      [
                                                          {
                                                                             "name" : "seo_search_title",
                                                                             "value" : "<search-include file="seo/seo_search_title.tpl" />"
                                                          },
                                                          {
                                                                             "name" : "seo_search_keywords",
                                                                             "value" : "<search-include file="seo/seo_search_keywords.tpl" />"
                                                          }
                                      ]
                   },

                   <search-if-suggestions>
                   "suggestions":
                                      [
                                      <search-suggestions>
                                      {
                                                          "suggestion":"<search-suggestion-text />",
                                                          "count": "<search-suggestion-result-count>"
                                      }<search-if-not-last-suggestion>,</search-if-not-last-suggestion>
                                      </search-suggestions>
                   ],
                   </search-if-suggestions>

                   "facets" :
                   [
                                     
                                      {
                                                          "name" : "event-type",
                                                          "values" : [<search-field-value-list name="event-type" quotes="yes" sortby="values" data="values" encoding="json"/>],
                                                          "counts" : [<search-field-value-list name="event-type" quotes="no" sortby="values" data="results" />]
                                      },
                                      {
                                                         "name" : "event-sub-type",
                                                          "values" : [<search-field-value-list name="event-sub-type" quotes="yes" sortby="values" data="values" encoding="json"/>],
                                                          "counts" : [<search-field-value-list name="event-sub-type" quotes="no" sortby="values" data="results" />]
                                      }
                   ],

                   "results" :
                   [
                                      <search-results>
                                      {
                                                          "fields" :
                                                          [
                                                                             {
                                                                                                "name" : "index",
                                                                                                "value" : "<search-index />"
                                                                             },
                                                                            
                                                                             {
                                                                                                "name" : "title",
                                                                                                "value" : "<search-display-field name="title"   length="500" encoding="json"/>"
                                                                             }
                                                          ]
                                      }<search-if-not-last>,</search-if-not-last>
                                      </search-results>
                   ]
}

 

Step 8) Push Staging changes to Live

·       Navigate to: Staging
      Make sure all changes are selected
·       Click “Push Live


End url in site will be like
https://sp1006666b.guided.ss-omtrdc.net/?sp_s=date-published;count=8;page=1;do=eventjson;x1=page-type;q1=INDEXING;x2=primary-tag;q2=event




Tips and Tricks:

1) If need different no. of results in first page and same in reaming pages.
Go to Settings > Searching > Searches

And, here we can configure it.

2) If we need to perform OR operation between all paramaters instead of AND. then we need to Contact Technical Support to activate this feature, as its not enabled OOTB.
Please refer: https://marketing.adobe.com/resources/help/en_US/snp/SPguide.pdf

3) If you want to sort by date property which is present in custom format then
    In Settings -> Metadata -> Definitions 
    Update field with Data type = Date
    And added additional format in field Date Format(s) along with existing formats = %d %b. %Y

  















 And updated Design->Templates -> transport template 
like
{
"name" : "my-custom-date",
                   "value" : "<search-display-field name="my-custom-date" date-format="%d %b. %Y" length="500" encoding="json"/>"

},

4) S&P - Debugging issues: 
To debug URL append &gsdb=searchpaths at the end of url.

How can we find Run log for S&P:
We can check process of S&P by appending URL as : /q=xxx&gsdo=searchpaths&gsdb=runlog&gsdblog=3

Search and promote Simulator in Browser without login:
just append the gscmc=1 parameter in the stage URL. That will load the simulator in the browser instead of login in S&P.

Analyse category or any complicate errors from page:
Add '&gsdb=searchpaths to the staged/live URL with query. Then 'view source' and look for the default search we can find more details.

Index logs

Majority of the indexing issues are published in index logs and by analysing it, we can resolve many of them.

Can we debug transport layer of S&P?

We can get the data passed from JSON layer to presentation layer by previewing the data. On template we need to select preview option to see the data output.

How to check syntax written in a temlate?
We have guided tags to create S&P output. While writing those, ust enable 'check syntax error' on template options. By doing this temlate throws error on save, when there is a syntax error.




Tricks:
1) OR operation between property names 
            sp_x_1=property1|property2&
            sp_q_1=test-keyword&
2) OR operation between property values 
            sp_x_3=property-name&
            sp_q_3=%22Value1%22%22Value2%22%22Value3%22

No comments:

Post a Comment