Thursday, February 23, 2017

Oracle Endeca ITL and Expereince Manager High Availability Architecture

What are High Availability and Failover   High availability  as the ability for the system to continue functioning after the failure of... thumbnail 1 summary
  • What are High Availability and Failover

    •  High availability as the ability for the system to continue functioning after the failure of one or more of the servers.
    • Failover as one possible implementation of high availability. Failover is defined as the ability for client connections to migrate from one server to another in the event of server failure so client applications can continue to operate.

    How to Setup ITL and XM Failover

    Two Information Transformation Layer (ITL) servers which host Tools and Framework required achieving high availability and another for Disaster recovery (DR) if required. 
    Only one ITL can be in active mode and remaining failover/backup should be passive mode . As per architecture, specific, in the diagram below, folders should be shared between primary and backup ITL servers using shared drive. DR generally hosted in the different data center so file system replication or other technique required for DR environment. The Shared drive can be setup during product and app installation.
    Following points needs to be taken care of during installation
    • Installation path should be same in all environments to avoid any conflicts and issues.
    • Endeca Application Initialize services script required to run from all the ITL servers for the first time.
    • Make sure to copy same Dgraph cluster XML with same naming convention to avoid duplicate Dgraph instance
    Find out block diagram below for HA understanding and setup

    What needs to be shared between active and passive ITL servers:-

    1.  Tools and Framework state folder
    2. Endeca application Data folder
    3. CAS workspace shared folder

    What happens if failover happens during mid-process 

    • Failover ITL would have to begin the process again if primary ITL Dgidx failed from Dgidx process.
    • Failover ITL would have to begin the entire process again if primary ITL forge failed.
    • Failover ITL would have to begin the entire process again if primary CAS indexing  failed.
    Note :  ATG properties need to be changed to redirect indexing to failover ITL in the event of primary ITL fault, but best practice would probably be to restart the indexing process again.
    For more Endeca related information visit:  http://www.ajayagrwal.com/

    Monday, January 2, 2017

    Endeca Basics : Interview Questions and Answers- Part1

    Endeca Basics - Interview Questions - Part-1 1. What is Endeca and why do you use Endeca instead of other search products? 2. What are ... thumbnail 1 summary

  • Endeca Basics - Interview Questions - Part-1

    1. What is Endeca and why do you use Endeca instead of other search products?
    2. What are dimensions and properties? 
    3. What is difference between single and multi dimension and how to create?
    4. Can same property used for dimension and properties if possible than how?
    5. What is Hierarchical Dimension and how can you create?
    6. How can you get complete hierarchy of hierarchical dimension using single query?
    7. What is Dimension search and is it different from Record search?
    8. Which Endeca query Parameters and value gives all Endeca Records from MDEX Engine?
    9. is it possible to get Record and Dimension search using single query?
    10. What are different Types of Endeca Query Available?
    11. is it possible to store some properties inside dimension and how? Where do you use this scenario?
    12. What are different types of Dimension available in Endeca?
    13. What is difference between Internal and External Dimension and where dimension values gets stored(File)?
    14. How to modify the Dimension ID?
    15. How to remove some Dimension value(not used) from Endeca Experience manager?


    Reply Your Answers to Comment Section. This would help others to understand Endeca Basics. I will consolidate the reply and post the answers. Will post another set of Questions soon.


    Monday, December 19, 2016

    Endeca 11.x : Unable to retrieve site definition for site id

    Behavior :-  Following Exception/Error comes during accessing the Endeca pages SEVERE: Unable to retrieve site definition for site id: ... thumbnail 1 summary

  • Behavior :- Following Exception/Error comes during accessing the Endeca pages

    SEVERE: Unable to retrieve site definition for site id: /storeSiteUS
    com.endeca.store.exceptions.PathNotFoundException: No node found at path: [pages].
            at com.endeca.store.configuration.InternalNode.getNode(InternalNode.java:153)
            at com.endeca.store.configuration.InternalNode.getNodeInfo(InternalNode.java:221)
            at com.endeca.store.configuration.InternalNode.getNode(InternalNode.java:150)
            at com.endeca.store.configuration.InternalNode.getNode(InternalNode.java:61)
            at com.endeca.infront.site.SiteManager.getSite(SiteManager.java:147)
            at atg.endeca.assembler.multisite.SiteStateParserImpl.parseSiteState(SiteStateParserImpl.java:94)
            at com.endeca.infront.site.SiteStateBuilder.createSiteState(SiteStateBuilder.java:110)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:606)
            at atg.nucleus.factory.instance.MethodInstanceFactory.createInstance(MethodInstanceFactory.java:303)
            at atg.nucleus.PropertyConfiguration.loadFromInstanceFactory(PropertyConfiguration.java:697)
            at atg.nucleus.PropertyConfiguration.createNewInstance(PropertyConfiguration.java:780)
            at atg.nucleus.PropertyConfiguration.createNewInstance(PropertyConfiguration.java:741)
            at atg.nucleus.NucleusNameResolver.createNewInstance(NucleusNameResolver.java:1619)
            at atg.nucleus.MultiRootNameResolver.createFromName(MultiRootNameResolver.java:833)
            at atg.nucleus.MultiRootNameResolver.resolveName(MultiRootNameResolver.java:455)
            at atg.nucleus.ConfigurationRef.getValue(ConfigurationRef.java:119)
            at atg.nucleus.SimpleComponentState.setBeanProperty(SimpleComponentState.java:406)
            at atg.nucleus.SimpleConfigurationState.saveToBean(SimpleConfigurationState.java:240)
            at atg.nucleus.SimpleConfigurationState.configureBean(SimpleConfigurationState.java:263)
            at atg.nucleus.BeanConfigurator.configureBean(BeanConfigurator.java:297)
            at atg.nucleus.PropertyConfiguration.configureService(PropertyConfiguration.java:1055)
            at atg.nucleus.MultiRootConfiguratorImpl.configureService(MultiRootConfiguratorImpl.java:103)
            at atg.nucleus.MultiRootNameResolver.configureService(MultiRootNameResolver.java:1116)
            at atg.nucleus.MultiRootNameResolver.configureAndStartService(MultiRootNameResolver.java:1195)
            at atg.nucleus.MultiRootNameResolver.bindAndConfigureService(MultiRootNameResolver.java:959)
            at atg.nucleus.MultiRootNameResolver.createFromName(MultiRootNameResolver.java:849)
            at atg.nucleus.MultiRootNameResolver.resolveName(MultiRootNameResolver.java:455)
            at atg.nucleus.MultiRootNameResolver.resolveName(MultiRootNameResolver.java:1064)
            at atg.nucleus.factory.instance.MethodInstanceFactory.getMethodToInvoke(MethodInstanceFactory.java:218)
            at atg.nucleus.factory.instance.MethodInstanceFactory.createInstance(MethodInstanceFactory.java:290)
            at atg.nucleus.PropertyConfiguration.loadFromInstanceFactory(PropertyConfiguration.java:697)
            at atg.nucleus.PropertyConfiguration.createNewInstance(PropertyConfiguration.java:780)
            at atg.nucleus.PropertyConfiguration.createNewInstance(PropertyConfiguration.java:741)
            at atg.nucleus.NucleusNameResolver.createNewInstance(NucleusNameResolver.java:1619)
            at atg.nucleus.MultiRootNameResolver.createFromName(MultiRootNameResolver.java:833)
            at atg.nucleus.MultiRootNameResolver.resolveName(MultiRootNameResolver.java:455)
            at atg.nucleus.ConfigurationRef.getValue(ConfigurationRef.java:119)

            at atg.nucleus.PropertyConfiguration.loadFromInstanceFactory(PropertyConfiguration.java:697)
            at atg.nucleus.PropertyConfiguration.createNewInstance(PropertyConfiguration.java:780)
            at atg.nucleus.PropertyConfiguration.createNewInstance(PropertyConfiguration.java:741)
            at atg.nucleus.NucleusNameResolver.createNewInstance(NucleusNameResolver.java:1619)
            at atg.nucleus.MultiRootNameResolver.createFromName(MultiRootNameResolver.java:833)
            at atg.nucleus.MultiRootNameResolver.resolveName(MultiRootNameResolver.java:455)
            at atg.nucleus.ConfigurationRef.getValue(ConfigurationRef.java:119)
            at atg.nucleus.SimpleComponentState.setBeanProperty(SimpleComponentState.java:406)
            at atg.nucleus.SimpleConfigurationState.saveToBean(SimpleConfigurationState.java:240)
            at atg.nucleus.SimpleConfigurationState.configureBean(SimpleConfigurationState.java:263)
            at atg.nucleus.BeanConfigurator.configureBean(BeanConfigurator.java:297)
            at atg.nucleus.PropertyConfiguration.configureService(PropertyConfiguration.java:1055)
            at atg.nucleus.MultiRootConfiguratorImpl.configureService(MultiRootConfiguratorImpl.java:103)
            at atg.nucleus.MultiRootNameResolver.configureService(MultiRootNameResolver.java:1116)
            at atg.nucleus.MultiRootNameResolver.configureAndStartService(MultiRootNameResolver.java:1195)
            at atg.nucleus.MultiRootNameResolver.bindAndConfigureService(MultiRootNameResolver.java:959)
            at atg.nucleus.MultiRootNameResolver.createFromName(MultiRootNameResolver.java:849)
            at atg.nucleus.MultiRootNameResolver.resolveName(MultiRootNameResolver.java:455)
            at atg.nucleus.ResolveNameHelperImpl.resolveName(ResolveNameHelperImpl.java:274)
            at atg.servlet.DynamoHttpServletRequest.resolveNameSingleNucleus(DynamoHttpServletRequest.java:3898)
            at atg.servlet.DynamoHttpServletRequest.resolveName(DynamoHttpServletRequest.java:3857)
            at atg.servlet.DynamoHttpServletRequest.resolveName(DynamoHttpServletRequest.java:3983)
            at atg.endeca.assembler.NucleusAssembler.resolveHandler(NucleusAssembler.java:182)


    Solution :-  Follow the steps as mentioned in my one of the previous post to solve above error.

    Unable to retrieve site definition for site id

    From Author
    Was this post resolve the solution you are looking for? are you looking for some other issues?Provide your comments

    Sunday, May 1, 2016

    Oracle Endeca 11.x : How to Migrate Endeca Application between environment?

    As part of the development/debugging phase, Endeca Application needs to be migrated from QA to UAT or Production to Staging. Following it... thumbnail 1 summary

  • As part of the development/debugging phase, Endeca Application needs to be migrated from QA to UAT or Production to Staging.

    Following items need to be migrated between environments. Find out the description below for each item.

    • Record Store Record store contains all indexable records(Product catalog, content, record store etc.) and dimension information.
    • Workbench application Business creates content using Endeca Experience manager and gets stored in ECR(Endeca Configuration Repository). This application contains XM content, cartridges and other configuration like thesaurus etc.
    • Index-config - Index-config contains all properties, dimensions, precedence rules and dictionary related configuration in JSON format.
      • Dimension Value Id Manager - Dimension Value Id manager contains Endeca auto generated dimension values. Endeca N-value can be different if this does not copy to the environment.
      • Endeca Pipeline -  This Folder contains Endeca Application indexing configuration XML including properties, dimensions, search etc.
      • Editors Config This Folder contains configuration file to make a call to MDEX to show appropriate data in Experience manager cartridges.
      productdataservice.json Snapshot
      productdataservice.json

      As part of the migration process, the application needs to be exported first and the same set of files can be used to import into another environment.

      Export Endeca Application steps 

      1. Record Store - Click here to get more details. This Step can be optional if baseline triggers using /atg/commerce/endeca/index/ProductCatalogSimpleIndexingAdmin Component

      2. Dimension Value Id Manager - Navigate To CAS Bin folder and run following commands to export
      CAS_Installation_Path/CAS/11.1.0/bin->./cas-cmd.[bat|sh] exportDimensionValueIdMappings -m <<dimension-value-id-manager name>> -f /home/atg/dimvalid.csv

      3. Endeca Pipeline - Copy Endeca_App/config/mdex folder

      4. Editors Config - Copy Endeca_App/config/ifcr/configuration/tools/xmgr folder

      5. Workbench Application - Navigate To Endeca Application control folder and run following commands to export content
             <<Endeca_App>>/control->./runcommand.[bat|sh] IFCR exportApplication </path to generate file>
      This would generate the zip/exploded folder.


      6. Index-Config - Navigate To Endeca Application control folder and run following commands to export index-config.json
           <<Endeca_APP_PATH>>/control->./index_config_cmd.[bat|sh] get-config -o all-File_Path/index-config.json



      Import Endeca Application steps - Steps should be in the following order.

      1. Record Store Click here to get more details. This Step can be optional if baseline triggers using /atg/commerce/endeca/index/ProductCatalogSimpleIndexingAdmin Component.

      2. Dimension Value Id Manager - Run below command to import dimension values
      <CAS_Installation_Path>/CAS/11.1.0/bin->./cas-cmd.[bat|sh] importDimensionValueIdMappings -m <<dimension-value-id-manager name>> -f /home/atg/dimvalid.csv

      3. Endeca Pipeline - Use the backup of <<Endeca_App>>/config/mdex folder and move pipeline.

      4. Editors ConfigCopy editors_config from step 5 and change host and post information based on environment under each json file and run the following command
               <<Endeca_App>>/control -> set_editors_config.[bat|sh]

      5. Index-Config - Run below command to import index-config.json
      <<Endeca_APP_PATH>>/control->./index_config_cmd.[bat|sh] set-config -o all -f File_path/index-config.json


      6. Endeca Baseline Update-  Run below Command

            <<Endeca_App>>/control -> ./baseline_update.[bat|sh]

      7. Workbench Content - Run below command to import workbench content
              <<Endeca_APP_PATH>>/control->./runcommand.sh IFCR importApplication <<export_zip_file/folder_path>>

      8. Promote Content - Run the following command to promote content from Authoring to Live. Promote content can be run the Workbench as well.
               <<Endeca_App>>/control -> ./promote_content.[bat|sh]

        From Author
        Was this post resolve the solution you are looking for? are you looking for some other issues?Provide your comments

        Friday, April 8, 2016

        Endeca SEO : How to enable Url Canonicalization?

        Endeca Url configuration is managed in endeca-seo-url-config.xml. SeoUrlFormatter class generates the SEO URL for refinements or landing pa... thumbnail 1 summary
      • Endeca Url configuration is managed in endeca-seo-url-config.xml. SeoUrlFormatter class generates the SEO URL for refinements or landing pages.



        What is Canonical URL

        Canonicalization is the process of picking the best/one URL when there are several choices.

        Example 

        User is on Category landing page and clicked on brand "Adidas" than Brand "Element", Another user clicked on Brand "Element" than Brand "Adidas" for same Category landing page. As per URL canonicalization, only one URL should be generated, regardless of selection path.

        Scenario 1- /Men-Clothing-T-Shirts/Adidas/Element/_/N-88uZ8m7Z8mk

        Scenario 2 - /Men-Clothing-T-Shirts/Element/Adidas/_/N-8m7Z8mkZ88u

        Any crawlers would treat both URLs as different URL even product records are same and this might lower down page ranking.


        How to setup URL canonicalization?

        set useNavStateCanonicalizer as true in SeoUrlFormatter and create bean entry navStateCanonicalizer as per the screenshot below. This setting would start creating canonical URL from Endeca response
        URL Canonicalization in Endeca using useNavStateCanonicalizer


        Once above setting is applied, the example above will generate only one URL regardless of traverse path. 

        /Men-Clothing-T-Shirts/Adidas/Element/_/N-88uZ8m7Z8mk

        Note :- Enabling canonicalization impacts the breadcrumb orders. 

        Click here to get more information related to Endeca SEO


        Sunday, April 3, 2016

        Endeca Basics : How to Debug Endeca Pipeline Components transformation is working as expected?

        A pipeline is composed of a collection of components. Each component performs a specific function during the transformation of  source data ... thumbnail 1 summary
      • A pipeline is composed of a collection of components. Each component performs a specific function during the transformation of  source data into Endeca records. Components are linked together by means of cross-references, giving the pipeline a sequential flow.

        Find out the way below to debug Endeca Pipeline Components transformation working as expected or not.

        1. Set the global log level. Log level can be set in Forge component using -v[f|e|w|i|d] option. Use -vd flag to increase Forge logging visibility as debug mode.

        2. -printRecords flag option to print records as they are produced by each pipeline component.

        3. Use Record Adapter - Insert a Record adapter between the pipeline components that needs to be review and set direction as Output. Make sure the Record source the component whose output needs to be examined. Pipeline stores the data in XML format and can be seen output XML under <<Endeca_App>>/data/processing folder.

        Find out screen shot below 
        Endeca Pipeline Output Record Adpater Debugging

        Tuesday, March 29, 2016

        Oracle Endeca : Change Default indexing order in Endeca Dgraph during baseline update

        Behaviour : - Records are getting indexed in Endeca and sort based on insertion order(FIFO) during baseline update from any source e.g re... thumbnail 1 summary
      • Behaviour : -

        Records are getting indexed in Endeca and sort based on insertion order(FIFO) during baseline update from any source e.g record store, JDBC query etc. Can indexing order be changed?

        Solution :- 

        Dgidx process reads data from either CAS or Forge process output and stores into the index. Dgidx provides a flag to change default insertion order.

        Add --sort <spec> into dgidx process. The format of <spec> is :"key|dir"

        Multiple sort keys can be specified as per below  format:


        "key_1[|dir_1]||key_2[|dir_2]||...||key_n[|dir_n]"

        Example :- --sort in_stock|desc||best_seller|desc

        Following entry needs to be added in DataIngest.xml under <Endeca_App>/config/script folder
        <dgidx id="Dgidx" host-id="ITLHost">
            <properties>
              <property name="numLogBackups" value="10" />
              <property name="numIndexBackups" value="3" />
            </properties>
            <args>
              <arg>-v</arg>
              <arg>--compoundDimSearch</arg>
              <arg>--sort in_stock|desc||best_seller|desc</arg>
            </args>
            <log-dir>./logs/dgidxs/Dgidx</log-dir>
            <input-dir>./data/cas_output</input-dir>
            <output-dir>./data/dgidx_output</output-dir>
            <temp-dir>./data/temp</temp-dir>
            <run-aspell>true</run-aspell>
          </dgidx> 






        Friday, March 25, 2016

        Oracle Endeca Commerce Architectural(XM and Assembler) Comparison Over Multiple Versions

        The Endeca Assembler and Experience Manager work together to provide the dynamic experience. Experience Manager  - Provides an interface... thumbnail 1 summary
      • The Endeca Assembler and Experience Manager work together to provide the dynamic experience.
        Experience Manager - Provides an interface to manage content configuration, enabling content administrators to create a targeted and compelling customer experience.
        The Endeca Assembler - Provides a unified interface for all content queries. The Assembler extracts information from the request and makes a query to the MDEX Engine to retrieve the configuration(Rule, Thesaurus, Stemming etc).
        Query Processing Flow - Application sends the request to the Endeca Assembler once the request comes from the user and Assembler fire a content query to MDEX to get the configuration to display a page. Point 2 and 3 are still valid for 11.2 version as thesaurus, stemming etc data is required for rule expansion.

        Here is the comparison cart below over multiple versions of Oracle Endeca releases. This Comparison talks about Endeca Content query response as per query process flow, daigram above, point 2 and 3. 
        Oracle Endeca versions performance comparison over multiple versions

        As per my analysis above, 11.2 version gives very good performance benifit in terms of Assember content query response time, size and remove application server dependency from IFCR repository.


        Click here to view Dgraph Performance Tuning


        From Author
        Was this post resolve the Endeca Performance issue? what do you think, making above steps may resolve most of the issues? Provide your comments 

        Thursday, March 24, 2016

        Endeca SEO : Display special characters in Assembler SEO URL

        In Endeca SEO Implementation, endeca-seo-config-url.xml is responsible to generate SEO URL.  Behaviour:- When using the endeca-seo-conf... thumbnail 1 summary
      • In Endeca SEO Implementation, endeca-seo-config-url.xml is responsible to generate SEO URL. 

        Behaviour:-

        When using the endeca-seo-config-url.xml file to implement SEO in Assembler, the NavStateFormatter doesn't handle special characters correctly and replaces with "-" dashes.

        Example :- Category Name : Bed + Bath, as creating SEO URL, "+" gets replaced with "-" so generated URL would be like "/Bed---bath/_/N-n1xqt8" but it should be "/Bed-and-bath/_/N-n1xqt8"

        • navigationState: "/Bed---bath/_/N-n1xqt8",
        • siteRootPath: "/pages",
        • label: "Bed + Bath"


        Solution :- 

        The RegexStringFormatter defined in endeca-seo-config-url.xml is not configured to handle special character by default so it replaced special character with a "-" character.

        Add the RegexStringFormatter under stringFormatters as per below :-


        <bean class="com.endeca.soleng.urlformatter.seo.RegexStringFormatter">
        <property name="pattern">
        <value><![CDATA[[+]]]></value>
        </property>
        <property name="replacement">
        <value>and</value>
        </property>
        <property name="replaceAll">
        <value>true</value>
        </property>
        </bean>


        This would generate Example as below


        • navigationState: "/Bed-and-bath/_/N-n1xqt8",
        • siteRootPath: "/pages",
        • label: "Bed + Bath"

        Click here to view How to Enable URL canonicalization


        From Author
        Was this post resolve the SEO issue?Provide your comments 

        Sunday, March 20, 2016

        Endeca Workbench 11.x: Change the Oracle Commerce Endeca Workbench Admin Password

        Find out the steps below to change the password 1. Review the {endeca_app}/config/script/WorkbenchConfig.xml file. Herein there is a propert... thumbnail 1 summary
      • Find out the steps below to change the password

        1. Review the {endeca_app}/config/script/WorkbenchConfig.xml file.
        Herein there is a property and value of "credentialsKey" and "ifcr", respectively.
        There is also a property and value of "mapName" and "endecaToolsAndFrameworks".

        2. Run the command manage_credentials.bat add --user admin --key ifcr under <<ToolsAndFrameworks_PATH>>/<<version>>/credential_store.
         - Update the password with the desired new password.
         - When it prompts to overwrite, type yes.

        3. Stop the Endeca Tools Service.

        4. Update the credentials in the 
        <<ToolsAndFrameworks_Path>>/<<version>>/server/workspace/conf/webstudio.properties file.
         - Look for the ifcr.password property.
         - Set it to the new value.
         - Save and close this file.

        5. Start the Endeca Tools Service.

        6. Update any saved crawl passwords, 
        - open last-mile-crawl.xml file under <<App_Path>>/config/cas folder.
        - Update password in the file 
        - Run ./cas-cmd.sh updateCrawls -f <<App_Path>>/config/cas/last-mile-crawl.xml

        7. update ATG component password on the 

        /dyn/admin/atg/endeca/index/ConfigImportDocumentSubmitter component.



        It's your Turn
        Was this post help you to resolve the issue that you are looking for? Any other issues that you might have and need a solution?

        Click here for more ATG-Endeca Integration related issue.



        Provide your feedback in the comment section below.

        Oracle Endeca - How to create a dimension based on more than one attributes?

        In Endeca, A Dimension can be created using multiple properties. Example: More Ways to Shop dimension should contain 3 different proper... thumbnail 1 summary
      • In Endeca, A Dimension can be created using multiple properties.

        Example: More Ways to Shop dimension should contain 3 different properties sale, online, new so that user should be able to select multiple refinements under one dimension.

        Following are the ways to achieve it :-

        1.  Using Product-sku-output-config.xml : 

        Add outpur-name and use same name for all properties those needs to be combined for one Dimension
             <property name="online" is-dimension="true" type="string" multiselect-type="multi-or" output-name="product.moreWaysToshop"/>
            <property name="sale" is-dimension="true" type="float" multiselect-type="multi-or" output-name="product.moreWaysToshop"/>
            <property name="new " is-dimension="true" type="float" multiselect-type="multi-or" output-name="product.moreWaysToshop"/>



        2. Developer Studio:  

        Map dimension to multiple source properties as per screen shot below: - 

        Oracle Endeca Developer Studio



        3. Index-config.json

        This can be used for CAS based indexing where we have multiple source and joined using Endeca CAS system. use following examples to add mapping to index-config.xml and can be found under <<Endeca_App>>/config/mdex folder

         "product.moreWaystoShop" : {
         "sourcePropertyNames" : [ "new" ],
         "isAutogen" : true,
         "jcr:primaryType" : "endeca:dimension"
         },
         "product.moreWaystoShop" : {
         "sourcePropertyNames" : [ "online" ],
         "isAutogen" : true,
         "jcr:primaryType" : "endeca:dimension"
         },
         "product.moreWaystoShop" : {
         "sourcePropertyNames" : [ "sale" ],
         "isAutogen" : true,
         "jcr:primaryType" : "endeca:dimension"
         }


        Output would be looks like below in Endeca jspref   :-

        Multiple properties mapping to Dimension in Enddeca Jsp ref Implementation

        Endeca Basics : does Stemming change relevance ranking score?

        Stemming feature allows expanding the search results from singular to plural and vice versa. Suppose, search term is "shoe", this... thumbnail 1 summary
      • Stemming feature allows expanding the search results from singular to plural and vice versa.

        Suppose, search term is "shoe", this gives the result for "shoe" and "shoes" both.  Find out example below:-

        Record -A 
        DGraph.WhyDidItMatch: product.keywords: shoe (Exact,Substring/Phrase)
        DGraph.WhyDidItMatch: product.longDescription: Perfect for a day at the beach or around town. Though simple in design, this is a great everyday shoe with cork heel for extra walking comfort during daily wear. (Substring/Phrase)

        Record- B
        DGraph.WhyDidItMatch: product.keywords: shoes (Stemming)
        DGraph.WhyDidItMatch: product.longDescription: With a suit or with jeans, these shoes will be a hit in either case. Made of supple leather and with a rubber sole. (Stemming)

        Both above records show, why did it match. Record-A got match based on exact match and Record-B based on stemming.

        Relevance ranking of Endeca provides one of the modules "Interp", this module ranks the exact/phrase matched product always on top than stemming matched.

        Click here to get more topics related to Endeca basic concepts.


        Saturday, March 19, 2016

        Endeca Basics : How to Add/Delete word from stemming dictionary??

        Oracle Endeca provides a dictionary for stemming for all languages. This dictionary is part of MDEX engine installation. Dictionary can be ... thumbnail 1 summary
      • Oracle Endeca provides a dictionary for stemming for all languages. This dictionary is part of MDEX engine installation. Dictionary can be found under \MDEX\<<vesion>>\conf\stemming directory.

        Why do we need to delete stemming dictionary? One of the use case below:-

        A user searching for search term "short" displays "shorts" results as well and vice versa.

        There are two ways to Add/Delete word from stemming dictionary:-

        1. Open specific language file  under \MDEX\<<vesion>>\conf\stemming folder and edit. This is not the recommended way to do it.

        2. Modify the default stemming dictionaries by running Dgidx with the --stemming-updates flag and specifying an XML file that contains the updates to the dictionary that you want to make. The update file can include both additions and deletions. Dgidx processes the file by adding and deleting entries in the static stemming dictionary file.

        Adding entries to a static stemming dictionary

        Each entry in a static stemming dictionary is defined by an <ADD_WORD_FORMS> element and its sub-element <WORD_FORMS_COLLECTION>. For example, the following entry adds apple and its plural form apples to the static stemming dictionary:
        <!DOCTYPE WORD_FORMS_COLLECTION_UPDATES SYSTEM "word_forms_collection_updates.dtd">
        <WORD_FORMS_COLLECTION_UPDATES>
        <ADD_WORD_FORMS>
        <WORD_FORMS_COLLECTION>
        <WORD_FORMS>
        <WORD_FORM>apple</WORD_FORM>
        <WORD_FORM>apples</WORD_FORM>
        </WORD_FORMS>
        </WORD_FORMS_COLLECTION>
        </ADD_WORD_FORMS>
        </WORD_FORMS_COLLECTION_UPDATES>


        Deleting entries from a static stemming dictionary

        <!DOCTYPE WORD_FORMS_COLLECTION_UPDATES SYSTEM "word_forms_collection_updates.dtd">
        <WORD_FORMS_COLLECTION_UPDATES>
        <REMOVE_WORD_FORMS_KEYS>
        <WORD_FORM>aalborg</WORD_FORM>
        </REMOVE_WORD_FORMS_KEYS>
        </WORD_FORMS_COLLECTION_UPDATES>


        Combining deletes and adds

        You can also specify a combination of deletes and adds. Deletes are processed before adds. For example,the following XML removes aachen and then adds it and several stemmed variants of it.
        <!DOCTYPE WORD_FORMS_COLLECTION_UPDATES SYSTEM "word_forms_collection_updates.dtd">
        <WORD_FORMS_COLLECTION_UPDATES>
        <REMOVE_WORD_FORMS_KEYS>
        <WORD_FORM>aachen</WORD_FORM>
        </REMOVE_WORD_FORMS_KEYS>
        <ADD_WORD_FORMS>
        <WORD_FORMS_COLLECTION>
        <WORD_FORMS>
        <WORD_FORM>aachen</WORD_FORM>
        <WORD_FORM>aachens</WORD_FORM>
        <WORD_FORM>aachenes</WORD_FORM>
        </WORD_FORMS>
        </WORD_FORMS_COLLECTION>
        </ADD_WORD_FORMS>
        </WORD_FORMS_COLLECTION_UPDATES>


        Processing the update file

        To process the stemming update file, run Dgidx with the --stemming-updates flag and specify the XML file that contains the stemming updates.
        For example:
        dgidx --stemming-updates myAppStemmingChanges.en.xml


        Endeca Basics : How to Disable Endeca Rule Manager trigger for Stemming?

        Stemming enables keyword search results to provide results for both singular and plural words. Stemming and spelling correction both trigg... thumbnail 1 summary
      • Stemming enables keyword search results to provide results for both singular and plural words.

        Stemming and spelling correction both triggers Endeca Rules in Experience manager.


        Stemming can not be disabled for Rule triggering. However, if stemming needs to be disabled for few search term, remove those words from Stemming dictionary.

        Stemming Dictionary can be found under \MDEX\<<version>>\conf\stemming

        Endeca Basics : What is Stemming?

        The Stemming feature expands search results to include root words and variants of root words.Stemming enables words with a common root (such... thumbnail 1 summary
      • The Stemming feature expands search results to include root words and variants of root words.Stemming enables words with a common root (such as the singular and plural forms of nouns) to be used interchangeably by searches. 

        Stemming enables the MDEX engine to consider alternate forms of individual words as equivalent for the purpose of search query matching.

        For example
        search results for the word "shirt" will include the plural form "shirts", while a search for shirts will include the singular form shirt.

        Enable Stemming

        Stemming can be enabled as follow :-
        1. Forge based system -  Open CRS.stemming.xml under <<Endeca_App>>/config/pipeline folder
        2. CAS based system - Open CRS.stemming.xml under <<Endeca_App>>/config/mdex folder

        add the following snippet to enable for English:

        <STEMMING>
          <STEM_EN_US ENABLE="TRUE" />

        </STEMMING>

        Note:-  Endeca OOTB provides the stemming dictionary for many languages.




        Oracle Endeca : Installation Order

        As per my experience, Endeca installation should be in the following order, because some of the installers request info about the other inst... thumbnail 1 summary
      • As per my experience, Endeca installation should be in the following order, because some of the installers request info about the other installations that if you don't have at the time of install you have to set manually later:

        1. MDEX (no other installer requirement)
        2. Platform Services (asks for the ENDECA_MDEX_ROOT path during install)
        3. Tools And Frameworks (asks for EAC Host and Port)
        4. CAS (this requires Tools And Frameworks to be installed first presumably because it wants to install the CAS Console plugin to Workbench).

        Oracle Endeca (3.x,11.x) - how to increase Java heap size of Tools and Framework?

        Sometimes workbench become unresponsive and content promotion start failing and start giving following types of exceptions:- 1. 27.02.201... thumbnail 1 summary
      • Sometimes workbench become unresponsive and content promotion start failing and start giving following types of exceptions:-

        1. 27.02.2016 05:24:20.123 *WARN* [New I/O server worker #1-40] org.jboss.netty [org.jboss.netty.channel.socket.nio.NioWorker] Unexpected exception in the selector loop. (java.lang.OutOfMemoryError: GC overhead limit exceeded) java.lang.OutOfMemoryError: GC overhead limit exceeded

        2. 27.02.2016 11:36:20.129 *WARN* [Thread-59] com.endeca.ifcr.content.server.PromotionSite channel: [id: 0x43cb8e6d, /IP Address:58846 => /IP Adress:8007] did not respond to 1 heartbeats.

        3. 27.02.2016 09:33:20.239 *ERROR* [WB host] org.apache.sling.extensions.threaddump.internal.Activator Uncaught exception in Thread Thread[WBhost] java.lang.OutOfMemoryError: Java heap space

        Solution:-

        The Workbench application of Tools and Framework is stored within a Tomcat instance.  Sometimes the Endeca project configuration can become large enough where the maximum heap needs to be increased.  
        This can be adjusted the maximum heap size to Tomcat JVM  by editing the -Xmx value. The default value is 1 GB. Change this to -Xmx2048m to specify a 2 GB maximum heap size or higher as per need.

        Goto  $ENDECA_TOOLS_ROOT/server/bin/workbench.sh and modify Xmx settingf below.

        CATALINA_OPTS="${WB_CATALINA_OPTS} -Xms256m"
        CATALINA_OPTS="${CATALINA_OPTS} -Xmx2G"

        Note:- Restart Endeca Tools and fFramework after making changes.

        Friday, March 18, 2016

        Oracle Endeca : Return All Levels of a Hierarchical Dimension With a Single Record Search Query

        In application, the catalog tree are stored in a hierarchical tree structure in Endeca (a hierarchical dimension). Only the top level dimens... thumbnail 1 summary
      • In application, the catalog tree are stored in a hierarchical tree structure in Endeca (a hierarchical dimension). Only the top level dimension values are returned from the hierarchy during record search query. 

        Currently in a record search it is not possible to return all intermediate and leaf dimension values from all levels (essentially a whole "branch" of the tree hierarchy) with one query. It would require multiple queries to return dimensions values that were beneath the top level of the hierarchy in the left-navigation of a record search.

        Find out the way below to solve above issue:-

        The Dimension Search feature does allow you to return all dimensions values for a Dimension with the D=* and the Di= parameter where Di is a dimension ID, but this is a different mechanism than the Dimensions that are returned for the left-navigation of a regular record search. The Dimension search feature search againest only dimension values and fires a light weight query.


        Oracle Endeca Dgraph : How to verify that Endeca MDEX Engine is running?

        Endeca uses MDEX engine(dgraph) to store indices. Application logic makes a query to Endeca MDEX engine to get the results back. If there a... thumbnail 1 summary
      • Endeca uses MDEX engine(dgraph) to store indices. Application logic makes a query to Endeca MDEX engine to get the results back. If there are multiple instances main MDEX engine called Dgraphs, then load balancer is required. 

        How Load balancer identify if a Dgraph is running or not before sending request:-

        load balancers can  send the "admin?op=ping" the command to the MDEX engine  to confirm whether a particular MDEX engine is up or not. Find out example below 

        Example: http://localhost:15000/admin?op=ping 

        Experience Manager Rules : Rule Trigger while record search

        Business can create rules in experience manager based on search term.  The following scenario would be considered for rule triggering based ... thumbnail 1 summary
      • Business can create rules in experience manager based on search term. 

        The following scenario would be considered for rule triggering based on location search term. This is applicable for Experience Manager 2.x, 3.x, and 11.x

        - Stemming is always considered for rule triggering. Thie can not be turned off

        - Thesaurus is never considered for rule triggering. Thie can not be turned on

        - Spell corrections are always considered for rule triggering. Thie can not be turned off.





        Text Widget