Wednesday, March 30, 2016

Oracle Endeca Commerce 11.x : How to troubleshoot file based promote content in Distributed environment?

On an Oracle Endeca Commerce 11.1 and later version, promote_content script publishes content to a folder as  zip  file format and ATG store... thumbnail 1 summary
  • On an Oracle Endeca Commerce 11.1 and later version, promote_content script publishes content to a folder as zip file format and ATG store instance reads and cache the zip file to serve the Endeca pages.

    Endeca End : 

    - ApplicationExportDirectory property in workbenchConfig.xml sets to tools and framework default path. Make sure ApplicationExportDirectory property pointing to correct shared location path. Find out sample config below :-

    <custom-component id="IFCR" host-id="ITLHost" class="com.endeca.soleng.eac.toolkit.component.IFCRComponent">
        <properties>
          <property name="repositoryUrl" value="http://localhost:8006/ifcr" />
          <property name="applicationExportDir" value="/shared_folder_path"/>
          <property name="numExportBackups" value="3" />
          <property name="credentialsKey" value="ifcr"/>
        </properties>
        <custom-bean ref="csfManager"/>
      </custom-component>

    - Make sure  Endeca ITL host has proper permission to write under specified shared folder.

    - Make sure all Store instances host and port entry in LiveAppServerCluster.xml


    ATG End : -

    - /atg/endeca/assembler/cartridge/manager/DefaultFileStoreFactory component is responsible to read zip file from shared location. Make sure configurationPath points to correct shared folder.

    atg_endeca_assembler_cartridge_manager_DefaultFileStoreFactory_Configuration_Path

    - Make sure store instance has permission to read files under shared folder

    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> 






    Sunday, March 27, 2016

    Forge Error : The requested file copy cannot be completed since it requires writing multiple files to the same location.

    Behaviour :-  Following Errors comes during baseline process. CRS.fetch_config_to_input_for_forge_Forge.log Mar 22, 2016 12:16... thumbnail 1 summary
  • Behaviour :- 

    Following Errors comes during baseline process.
    CRS.fetch_config_to_input_for_forge_Forge.log
    Mar 22, 2016 12:16:35 PM com.endeca.esf.delegate.task.TaskLogger info
    INFO: [Central Server: 10.218.4.6] List files for path: /data/atg/endeca/apps/CRS/
    ./config/pipeline/\* recursively.
    Mar 22, 2016 12:16:35 PM com.endeca.esf.delegate.task.TaskLogger info
    INFO: [Central Server: 10.218.4.6] List files for path /data/atg/endeca/apps/CRS
    /./config/pipeline/\* recursive  returned 144 items.
    Mar 22, 2016 12:16:35 PM com.endeca.esf.delegate.task.TaskLogger severe
    SEVERE: [Central Server: 10.218.4.6] The copy failed:
    The requested file copy cannot be completed since it requires writing multiple files to the same location.
    The files /data/atg/endeca/apps/CRS/config/pipeline/CRS.languages.xml /data/atg/endeca/apps/CRS/config/pipeline/CRS.merch_rule_group_default.xml /data/atg/endeca/apps/CRS/config/pipeline/CRS.profiles.xml /data/atg/endeca/apps/CRS/config/
    pipeline/partial_pipeline.lyt /data/atg/endeca/apps/CRS/config/pipeline/CRS.search_chars.xml /data/atg/endeca/apps/CRS/config/pipeline/CRS.dimension_groups.xml /data/atg/endeca/apps/CRS/config/pipeline/CRS.thesaurus.xml /data/atg/endeca/
    apps/CRS/config/pipeline/CRS.record_filter.xml /data/atg/endeca/apps/CRS/config/pipeline/pipeline.lyt /data/atg/endeca/apps/CRS/config/pipeline/CRS.render_config.xml /data/atg/endeca/apps/CRS/config/pipeline/CRS.dimension_refs.xml /data/
    atg/endeca/apps/CRS/config/pipeline/configurationGenerator.epx /data/atg/endeca/apps/CRS/config/pipeline/crawl_profile_1_url_list.xml /data/atg/endeca/apps/CRS/config/pipeline/CRS.record_spec.xml /data/atg/endeca/apps/CRS/config/pipeline
    /CRS.dimsearch_config.xml /data/atg/endeca/apps/CRS/config/pipeline/CRS.key_props.xml /data/atg/endeca/apps/CRS/config/pipeline/CRS.crawl_profiles.xml /data/atg/endeca/apps/CRS/config/pipeline/partial_pipeline.epx /data/atg/endeca/apps/L
    LM/config/pipeline/CRS.dval_refs.xml /data/atg/endeca/apps/CRS/config/pipeline/CRS.rollups.xml /data/atg/endeca/apps/CRS/config/pipeline/CRS.merch_rules.xml /data/atg/endeca/apps/CRS/config/pipeline/crawl_profile_1.xml /data/atg/endeca/a
    pps/CRS/config/pipeline/CRS.dimsearch_index.xml /data/atg/endeca/apps/CRS/config
    /pipeline/CRS.prop_refs.xml /data/atg/endeca/apps/CRS/config/pipeline/crawl_profile_1_config.xml /data/atg/endeca/apps/CRS/config/pipeline/CRS.recsearch_inde
    xes.xml /data/atg/endeca/apps/CRS/config/pipeline/CRS.phrases.xml /data/atg/endeca/apps/CRS/config/pipeline/CRS.refinement_config.xml /data/atg/endeca/apps/CRS/config/pipeline/CRS.analytics_config.xml /data/atg/endeca
    /apps/CRS/config/pip
    eline/CRS.merch_rule_group_default_redirects.xml /data/atg/endeca/apps/CRS/config
    /pipeline/CRS.merchstyles.xml /data/atg/endeca/apps/CRS/config/pipeline/CRS.record_sort_config.xml /data/atg/endeca/apps/CRS/config/pipeline/CRS.crawler_glo
    bal_config.xml /data/atg/endeca/apps/CRS/config/pipeline/pipeline.epx /data/atg/endeca/apps/CRS/config/pipeline/CRS.stemming.xml /data/atg/endeca/apps/CRS/config/pipeline/CRS.relrank_strategies.xml /data/atg/endeca/apps
    /CRS/config/pipeli
    ne/CRS.merchzones.xml /data/atg/endeca/apps/CRS/config/pipeline/CRS.esp /data/atg/endeca/apps/CRS/config/pipeline/CRS.recsearch_config.xml /data/atg/endeca/apps/CRS/config/pipeline/CRS.derived_props.xml /data/atg/endeca/
    apps/CRS/config/p
    ipeline/CRS.crawler_defaults.properties /data/atg/endeca/apps/CRS/config/pipeline/
    CRS.precedence_rules.xml /data/atg/endeca/apps/CRS/config/pipeline/dimensions.xml /data/atg/endeca/apps/CRS/config/pipeline/CRS.stop_words.xml /data/atg/en
    deca/apps/CRS/config/pipeline/externaldimensions.xml /data/atg/endeca/apps/
    CRS/config/pipeline/CRS.dval_ranks.xml
    would all be copied to /data/atg/endeca/apps/CRS/data/processing
    Mar 22, 2016 12:16:35 PM com.endeca.esf.delegate.task.TaskLogger severe
    SEVERE: [Central Server: 10.218.4.6] com.endeca.esf.shared.EsfException:
    The requested file copy cannot be completed since it requires writing multiple files to the same location.
    The files /data/atg/endeca/apps/CRS/config/pipeline/CRS.languages.xml /data/atg/endeca/apps/CRS/config/pipeline/CRS.merch_rule_group_default.xml /data/atg/endeca/apps/CRS/config/pipeline/CRS.profiles.xml /data/atg/endeca/apps/CRS/config/
    pipeline/partial_pipeline.lyt /data/atg/endeca/apps/CRS/config/pipeline/CRS.search_chars.xml /data/atg/endeca/apps/CRS/config/pipeline/CRS.dimension_groups.xml /data/atg/endeca/apps/CRS/config/pipeline/CRS.thesaurus.xml /data/atg/endeca/
    apps/CRS/config/pipeline/CRS.record_filter.xml /data/atg/endeca/apps/CRS/config/pipeline/pipeline.lyt /data/atg/endeca/apps/CRS/config/pipeline/CRS.render_config.xml /data/atg/endeca/apps/CRS/config/pipeline/CRS.dimension_refs.xml /data/
    atg/endeca/apps/CRS/config/pipeline/configurationGenerator.epx /data/atg/endeca/apps/CRS/config/pipeline/crawl_profile_1_url_list.xml /data/atg/endeca/apps/CRS/config/pipeline/CRS.record_spec.xml /data/atg/endeca/apps/CRS/config/pipeline
    /CRS.dimsearch_config.xml /data/atg/endeca/apps/CRS/config/pipeline/CRS.key_props.xml /data/atg/endeca/apps/CRS/config/pipeline/CRS.crawl_profiles.xml /data/atg/endeca/apps/CRS/config/pipeline/partial_pipeline.epx /data/atg/endeca/apps/L
    LM/config/pipeline/CRS.dval_refs.xml /data/atg/endeca/apps/CRS/config/pipeline/CRS.rollups.xml /data/atg/endeca/apps/CRS/config/pipeline/CRS.merch_rules.xml /data/atg/endeca/apps/CRS/config/pipeline/crawl_profile_1.xml /data/atg/endeca/a
    pps/CRS/config/pipeline/CRS.dimsearch_index.xml /data/atg/endeca/apps/CRS/config/pipeline/CRS.prop_refs.xml /data/atg/endeca/apps/CRS/config/pipeline/crawl_profile_1_config.xml /data/atg/endeca/apps/CRS/config/pipeline/CRS.recsearch_inde
    xes.xml /data/atg/endeca/apps/CRS/config/pipeline/CRS.phrases.xml /data/atg/endeca/apps/CRS/config/pipeline/CRS.refinement_config.xml /data/atg/endeca/apps/CRS/config/pipeline/CRS.analytics_config.xml /data/atg/endeca/apps/CRS/config/pip
    eline/CRS.merch_rule_group_default_redirects.xml /data/atg/endeca/apps/CRS/config/pipeline/CRS.merchstyles.xml /data/atg/endeca/apps/CRS/config/pipeline/CRS.record_sort_config.xml /data/atg/endeca/apps/CRS/config/pipeline/CRS.crawler_glo
    bal_config.xml /data/atg/endeca/apps/CRS/config/pipeline/pipeline.epx /data/atg/endeca/apps/CRS/config/pipeline/CRS.stemming.xml /data/atg/endeca/apps/CRS/config/pipeline/CRS.relrank_strategies.xml /data/atg/endeca/apps/CRS/config/pipeli
    ne/CRS.merchzones.xml /data/atg/endeca/apps/CRS/config/pipeline/CRS.esp /data/atg/endeca/apps/CRS/config/pipeline/CRS.recsearch_config.xml /data/atg/endeca/apps/CRS/config/pipeline/CRS.derived_props.xml /data/atg/endeca/apps/CRS/config/p
    ipeline/CRS.crawler_defaults.properties /data/atg/endeca/apps/CRS/config/pipeline/CRS.precedence_rules.xml /data/atg/endeca/apps/CRS/config/pipeline/dimensions.xml /data/atg/endeca/apps/CRS/config/pipeline/CRS.stop_words.xml /data/atg/en
    deca/apps/CRS/config/pipeline/externaldimensions.xml /data/atg/endeca/apps/CRS/config/pipeline/CRS.dval_ranks.xml
    would all be copied to /data/atg/endeca/apps/CRS/data/processing
            at com.endeca.esf.shared.util.file.FileCopyDestinationResolver.calculateDestinations
    (FileCopyDestinationResolver.java:77)
            at com.endeca.esf.delegate.task.FileCopyTask.doTaskWork(FileCopyTask.java:70)
            at com.endeca.esf.delegate.task.AbstractTask$1.run(AbstractTask.java:90)



    Solution:-

    Above exception comes during Baseline->Forge Process. Sometimes <<Endeca_App>>/data/processing folder gets deleted or file name created as "processing" instead of the folder.

    Following steps would resolve forge exception:-

    1. Delete file "processing" under /data folder if any.
    2. Create "processing" folder /data folder.
    3. Run Baseline process once again.







    Saturday, March 26, 2016

    SocketTimeoutException: Time out error during Read Records From CAS RecordStore

    Behaviour :- Following errors comes during baseline update <SEVERE: Caught an exception while invoking method 'run' on object ... thumbnail 1 summary
  • Behaviour :-

    Following errors comes during baseline update

    <SEVERE: Caught an exception while invoking method 'run' on object 'BaselineUpdate'. Releasing locks.
    java.lang.reflect.InvocationTargetException
            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 com.endeca.soleng.eac.toolkit.Controller.invokeRequestedMethod(Controller.java:931)
            at com.endeca.soleng.eac.toolkit.Controller.execute(Controller.java:269)
            at com.endeca.soleng.eac.toolkit.Controller.main(Controller.java:137)
    Caused by: com.endeca.soleng.eac.toolkit.exception.AppControlException: Error executing valid BeanShell script.
            at com.endeca.soleng.eac.toolkit.script.Script.runBeanShellScript(Script.java:179)
            at com.endeca.soleng.eac.toolkit.script.Script.run(Script.java:127)
            ... 7 more
    Caused by: com.endeca.soleng.eac.toolkit.exception.CasCommunicationException: Error starting baseline crawl 'stg1-last-mile-crawl'.
            at com.endeca.eac.toolkit.component.cas.ContentAcquisitionServerComponent.startBaselineCasCraw
    l(ContentAcquisitionServerComponent.java:400)
            at com.endeca.eac.toolkit.component.cas.ContentAcquisitionServerComponent.runBaselineCasCrawl
    (ContentAcquisitionServerComponent.java:308)
            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 bsh.Reflect.invokeMethod(Unknown Source)
            at bsh.BSHMethodInvocation.eval(Unknown Source)
            at bsh.BSHPrimaryExpression.eval(Unknown Source)
            at bsh.BSHPrimaryExpression.eval(Unknown Source)
            at bsh.BSHBlock.evalBlock(Unknown Source)
            at bsh.BSHBlock.eval(Unknown Source)
            at bsh.BSHBlock.eval(Unknown Source)
            at bsh.BSHIfStatement.eval(Unknown Source)
            at bsh.Interpreter.eval(Unknown Source)
            at bsh.Interpreter.eval(Unknown Source)
            at bsh.Interpreter.eval(Unknown Source)
            at com.endeca.soleng.eac.toolkit.script.Script.runBeanShellScript(Script.java:165)
            ... 8 more
    Caused by: java.net.SocketTimeoutException: Read timed out
            at org.apache.axis.AxisFault.makeFault(AxisFault.java:101)
            at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:154)
            at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
            at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
            at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
            at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)
            at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
            at org.apache.axis.client.Call.invoke(Call.java:2767)
            at org.apache.axis.client.Call.invoke(Call.java:2443)
            at org.apache.axis.client.Call.invoke(Call.java:2366)
            at org.apache.axis.client.Call.invoke(Call.java:1812)
            at com.endeca.cas.wsdl.CasCrawlerServiceSoapBindingStub.startCrawl
    (CasCrawlerServiceSoapBindingStub.java:1202)




    Solution :- 

    By default the "httpSocketTimeout" is set to 60 secs. Increasing this resolves the read timeout error.

    Update the "httpSocketTimeout" value in DataIngest.xml in the deployed app. The value is in milliseconds and Restart CAS before running baseline.

    Endeca Baseline Error : SEVERE: Unable to update Assembler

    Behaviour:- Following Errors comes during baseline process SEVERE: Unable to update Assembler at URL: http://hostname:10280/dyn/... thumbnail 1 summary
  • Behaviour:-

    Following Errors comes during baseline process


    SEVERE: Unable to update Assembler at URL: http://hostname:10280/dyn/admin/assemblerAdmin/admin
    org.apache.http.conn.HttpHostConnectException: Connection to http://hostname:10280 refused
            at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection
    (DefaultClientConnectionOperator.java:158)
            at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:149)
            at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:121)
            at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:562)
            at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:415)
            at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
            at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:754)
            at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:732)
            at com.endeca.soleng.eac.toolkit.component.AssemblerUpdateComponent.updateAssemblers
    (AssemblerUpdateComponent.java:122)
            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 bsh.Reflect.invokeMethod(Unknown Source)
            at bsh.Reflect.invokeObjectMethod(Unknown Source)
            at bsh.Name.invokeMethod(Unknown Source)
            at bsh.BSHMethodInvocation.eval(Unknown Source)
            at bsh.BSHPrimaryExpression.eval(Unknown Source)
            at bsh.BSHPrimaryExpression.eval(Unknown Source)
            at bsh.Interpreter.eval(Unknown Source)
            at bsh.Interpreter.eval(Unknown Source)
            at bsh.Interpreter.eval(Unknown Source)



    Solution:-

    This error comes, when Endeca script tries to update store instance or assembler. This entry available under LiveAppServerCluster.xml file. Correct host and port entry to fix the issue.

    Endeca CAS Last-Mile-Crawl : wrong value for property 'mergeAction' (UPDATE) when no imported entry found to merge with

    Behaviour :- Following Exception comes while during baseline run Mar 11, 2015 8:20:25 PM com.endeca.soleng.eac.toolkit.Controlle... thumbnail 1 summary
  • Behaviour :-

    Following Exception comes while during baseline run


    Mar 11, 2015 8:20:25 PM com.endeca.soleng.eac.toolkit.Controller execute
    SEVERE: Caught an exception while invoking method 'run' on object 'BaselineUpdate'. Releasing locks.
    java.lang.reflect.InvocationTargetException
            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 com.endeca.soleng.eac.toolkit.Controller.invokeRequestedMethod(Controller.java:931)
            at com.endeca.soleng.eac.toolkit.Controller.execute(Controller.java:269)
            at com.endeca.soleng.eac.toolkit.Controller.main(Controller.java:137)
    Caused by: com.endeca.soleng.eac.toolkit.exception.AppControlException: Error executing valid BeanShell script.
            at com.endeca.soleng.eac.toolkit.script.Script.runBeanShellScript(Script.java:179)
            at com.endeca.soleng.eac.toolkit.script.Script.run(Script.java:127)
            ... 7 more
    Caused by: com.endeca.soleng.eac.toolkit.exception.CasCommunicationException:
     Error starting baseline crawl 'stg1-last-mile-crawl'.
            at com.endeca.eac.toolkit.component.cas.ContentAcquisitionServerComponent.startBaselineCasCrawl
    (ContentAcquisitionServer
    Component.java:400)
            at com.endeca.eac.toolkit.component.cas.ContentAcquisitionServerComponent.runBaselineCasCrawl
    (ContentAcquisitionServerComponent.java:308)
            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 bsh.Reflect.invokeMethod(Unknown Source)
            at bsh.Reflect.invokeObjectMethod(Unknown Source)
            at bsh.Name.invokeMethod(Unknown Source)
            at bsh.Reflect.invokeObjectMethod(Unknown Source)
            at bsh.Name.invokeMethod(Unknown Source)
            at bsh.BSHMethodInvocation.eval(Unknown Source)
            at bsh.BSHPrimaryExpression.eval(Unknown Source)
            at bsh.BSHPrimaryExpression.eval(Unknown Source)
            at bsh.BSHBlock.evalBlock(Unknown Source)
            at bsh.BSHBlock.eval(Unknown Source)
            at bsh.BSHBlock.eval(Unknown Source)
            at bsh.BSHIfStatement.eval(Unknown Source)
            at bsh.Interpreter.eval(Unknown Source)
            at bsh.Interpreter.eval(Unknown Source)
            at bsh.Interpreter.eval(Unknown Source)
            at com.endeca.soleng.eac.toolkit.script.Script.runBeanShellScript(Script.java:165)
            ... 8 more
    Caused by: Crawl failed to start: Error retrieving attributes from the config repository: 
    Unable to create JSON output for merge request: validation errors:
      ERROR: failure to add '/sites/stg1/attributes/content.repositoryId' to merged output: wrong value for property 'mergeAction' (UPDATE) when no imported entry found to merge with.
      ERROR: failure to add '/sites/stg1/attributes/product.repositoryId' to merged output: wrong value for property 'mergeAction' (UPDATE) when no imported entry found to merge with.
      ERROR: failure to add '/sites/stg1/attributes/store.repositoryId' to merged output: wrong value for property 'mergeAction' (UPDATE) when no imported entry found to merge with.
      ERROR: failure to add '/sites/stg1/attributes/article.repositoryId' to merged output: wrong value for property 'mergeAction' (UPDATE) when no imported entry found to merge with.
      ERROR: failure to add '/sites/stg1/attributes/sku.margin' to merged output: wrong value for property 'mergeAction' (UPDATE) when no imported entry found to merge with.
    . See config repository log for more details.

            at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)




    Solution :- 

    "wrong value for property 'mergeAction' (UPDATE) when no imported entry found to merge with" Error comes if /config/index-config/index-config.json cotains a property or dimension that does not exist in indexing Data.

    Remove dimension and property those are not required and not used in application from index-config.json and do set-config to update ECR repository.

    Find out command below :-


    <<Endeca_APP_PATH>>/control->./index_config_cmd.sh set-config -o system -f <<File_Path>>/index-config.json


    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.




    Create new Crawler in Endeca 11.x application : Could not find the crawl Error

    Behaviour :-  Sometimes, "Could not find the crawl" or "crawler has been removed/corrupted" error comes during baseli... thumbnail 1 summary
  • Behaviour :- 

    Sometimes, "Could not find the crawl" or "crawler has been removed/corrupted" error comes during baseline run.


    Solution:- 

    Run below command to see if last-mile-crawl exist or not. 

    <<CAS_Path>>/11.1.0/bin>./cas-cmd.sh listCrawls

    Run below command to create last mile crawl.

    <<CAS_Path>>/11.1.0/bin>./cas-cmd.sh createCrawls -f <<Endeca_App_Path>>/config/cas/last-mile-crawl.xml

    Note:- Above Command would create the crawl. Creating crawl is executed during "initialize_services.sh" when Endeca application creates for the first time.

    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

    Spelling Auto Correction : how to disable Auto Correction for certain search term?

    Spelling auto-correction for record search automatically computes alternate spellings for user query terms that are misspelled. Spelling cor... thumbnail 1 summary
  • Spelling auto-correction for record search automatically computes alternate spellings for user query terms that are misspelled.

    Spelling correction is usually enabled in Dgraph flag "--spl" and this would enable spelling auto-correction for the record search. If there are requirements to disable auto-correction use, some extra parameters needs to be passed in Endeca MDEX Query as below :

     Ntx=mode+matchallany+spell+nospell 

    "spell+nospell" will disable spelling auto correction. This can be tested in jsp_ref implementation.

    Note:- Assembler implementation does not support above approach till current version.

    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 

    Tuesday, March 22, 2016

    Endeca Assembler : Does Breadcrumb provide URL for individual refinement?

    Breadcrumbs represents the active navigation state or current selection of navigation state. This may contains refinement or search breadcr... thumbnail 1 summary
  • Breadcrumbs represents the active navigation state or current selection of navigation state. This may contains refinement or search breadcrumb. 



    Behaviour :-

    Endeca Assembler imeplemenation provide a way to get "removeAction" URL. "removeAction" gives a URL to remove a breadcrumb. Some times selected refinement URL required to retain breadcrumbs. As per image below. 

    Example:-
    1. User land on sale page created using product.OnSale->1 value in XM.
    2. User Selected multiple refinement under sale page.
    3. Click on Remove All. This action should get back to Sale Page. 
    4. Currently breadcrumb provides remove URL for  product.OnSale->1 not for sale dimension it self


    Breadcrumb removeAction Removeall URL



    Assembler provide a response like below :-
    <Property name="removeAction">
    <Item class="class com.endeca.infront.cartridge.model.NavigationAction">
    <Property name="contentPath">
    <String>/browse</String>
    </Property>
    <Property name="navigationState">
    <String>/_/N-yoxkik?format=xml</String>
    </Property>
    <Property name="siteRootPath">
    <String>/pages</String>
    </Property>
    </Item>
    </Property>
    </Item>
    </Property>



    Solution :-

    In ATG, CRS extends Endeca OOTB BreadCrumbsHanddler to StoreBreadcrumbsHandler.

    Extend StoreBreadcrumbsHandler and write a logic to populate URL for self. Below code would provide the URL and set into Breadcrumb properties.

     NavigationState.selectNavigationFilter(dimension.getDescriptor().getId())

    Output would below, URL is customized property name for dimension :-
    <Property name="URL">
    <String>
    /assortments-and-baskets/bakery-assortments/_/N-d6hiw0?format=xml
    </String>

    </Property>

    Click here to get more information related to ATG-Endeca Integration.

    Monday, March 21, 2016

    Endeca XM : Cartridge template changes does not reflect in previously created experience manager pages

    Cartridge templates are basic building blocks of Endeca experience manager pages. The developer creates/update the cartridges as per busines... thumbnail 1 summary
  • Cartridge templates are basic building blocks of Endeca experience manager pages. The developer creates/update the cartridges as per business need and deploy to XM.

    Business can use multiple cartridges in experience manager to create a page. 

    Behaviour :-
    Cartridge template changes do not reflect in experience manager  previously created pages.

    Example

    ResultsList Cartridge has the default value of  the number of records to display as 20 and Business users used for multiple pages. 
    Now, business wants to change it to 24 as default records.After making changes to 24, it does not reflect on previously created pages and still shows the 20 after deploying and promoting the changes.

    Solution :-

    Business user has to open each and every rule wherever ResultsList Cartridge is being used and save. The business user would get a popup that provides a warning message, cartridge templates might have changes.

    Note :- Developer can edit rule values after 11.1 if zip file approach is used and upload the same back to experience manager.

    Sunday, March 20, 2016

    Oracle Endeca 10.x : Cancelling the Baseline from SimpleIndexingAdmin does not Release Update Lock

    Cancelling the indexing job during EndecaIndexing state (/atg/commerce/endeca/index/EndecaScriptService), the last script in the baseline in... thumbnail 1 summary
  • Cancelling the indexing job during EndecaIndexing state (/atg/commerce/endeca/index/EndecaScriptService), the last script in the baseline index process does not release the update_lock. As a result, any subsequent baseline or partial updates fail with the message "WARNING: Failure to acquire lock." Following warning in the application log can be seen below:-


    Aug 9, 2015 5:16:54 PM com.endeca.soleng.eac.toolkit.Controller setUpBeanShellInterpreters
    CONFIG: Loading beanshell.imports from /<some path>/<app>/config/script/beanshell.imports
    Aug 9, 2015 5:16:54 PM com.endeca.soleng.eac.toolkit.Controller provision
    INFO: Checking definition from AppConfig.xml against existing EAC provisioning.
    Aug 9, 2015 5:16:54 PM com.endeca.soleng.eac.toolkit.Controller provision
    INFO: Definition has not changed.
    Aug 9, 2015 5:16:54 PM sun.reflect.NativeMethodAccessorImpl invoke0
    INFO: Starting partial update script.
    Aug 9, 2015 5:16:58 PM sun.reflect.NativeMethodAccessorImpl invoke0
    WARNING: Failed to obtain lock.

    Note: - This issue also occurs if subsequent BCC deployment starts while an indexing job is still running.

    Workaround

    Under <endeca_app_path>/control on Endeca side, run the runcommand to release lock.
    /runcommand.sh" --skip-definition LockManager releaseLock update_lock

    Solution

    Hot patch has been released from Oracle on this.

    Hotfix Patch 17298595

    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.

    Endeca Experience Manager 11.1 : Content Editor panel is blank after dragging and dropping cartridges

    Behaviour :-   When adding new links, or rearranging categories in Endeca Experience Manager's content editor panel, occasionally the en... thumbnail 1 summary
  • Behaviour :-  

    When adding new links, or rearranging categories in Endeca Experience Manager's content editor panel, occasionally the entire node hierarchy disappears from view.  The only way to make it visible again is to save, cancel out of the save, and click back into the editor.

    Solution :-
    Oracle has provided the patch for above issue so that Navigation section should not become blank. Drag and drop of content from one to another should happen without issues. 

    Find out patch details below :
    Patch:22132614: Content Editor panel is blank after dragging and dropping.

    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


    Text Widget