Issue with the Tridion Docs Search API (13.0.2)

I am getting an internal error from search API when my search term includes a question mark (?) and the search operator is equals

I am passing the following request to the search API

<ishquery>
   <and>
      <ishfield name="FTITLE" level="logical" ishoperator="equal">¿Qué es ECR?</ishfield>
   </and>
   <ishsort>
      <ishsortfield name="ISHSCORE" ishorder="d" />
   </ishsort>
   <ishobjectfilters>
      <ishversionfilter>LatestVersion</ishversionfilter>
      <ishtypefilter>ISHModule</ishtypefilter>
      <ishtypefilter>ISHMasterDoc</ishtypefilter>
      <ishtypefilter>ISHLibrary</ishtypefilter>
      <ishlanguagefilter>en-US</ishlanguagefilter>
   </ishobjectfilters>
</ishquery>

When this is executed I get the following exception

[-109002] Invalid SELECT request. Bad Request [statuscode:BadRequest] [http://127.0.0.1:8078/solr/LatestVersion/select] [retries:5 timeout:180] [109002;BadSolrLuceneRequest]

If I remove the ? at the end the title value the query call works ( no results )

If I use the operator contains instead of equal the query call works ( to many results )

I have tried url encoding the title value, that returns no results.

The only option I can think of is to use contains and check the top result to see if it's title matches the requested title, but that would require multiple API calls

Do I have any other options here ?

Thanks

Greg

emoji
Parents
  • Hi Greg,

    The question mark, and other special characters, often need escaping across the stack. So from HTML over JavaScript into Xml/SOAP/Api up to the Solr request that powers our Full Text Index.

    I experimented a bit end-of-day (using ISHRemote :)), and I got it seemingly working by quoting. 

    $xmlQuery = @"
    <ishquery>
       <and>
          <ishfield name="FTITLE" level="logical" ishoperator="equal">"¿Qué es ECR?"</ishfield>
       </and>
       <ishsort>
          <ishsortfield name="ISHSCORE" ishorder="d" />
       </ishsort>
       <ishobjectfilters>
          <ishversionfilter>LatestVersion</ishversionfilter>
          <ishtypefilter>ISHModule</ishtypefilter>
          <ishtypefilter>ISHMasterDoc</ishtypefilter>
          <ishtypefilter>ISHLibrary</ishtypefilter>
          <ishlanguagefilter>en</ishlanguagefilter>
       </ishobjectfilters>
    </ishquery>
    "@
    Search-IshDocumentObj -XmlQuery $xmlQuery -Count

    If the escaping is not doing it, then I agree that the Search using the "contains" operator to get to an acceptable result and then filtering out the false positives is the best alternative.

    Best wishes,
    Dave

    emoji
Reply
  • Hi Greg,

    The question mark, and other special characters, often need escaping across the stack. So from HTML over JavaScript into Xml/SOAP/Api up to the Solr request that powers our Full Text Index.

    I experimented a bit end-of-day (using ISHRemote :)), and I got it seemingly working by quoting. 

    $xmlQuery = @"
    <ishquery>
       <and>
          <ishfield name="FTITLE" level="logical" ishoperator="equal">"¿Qué es ECR?"</ishfield>
       </and>
       <ishsort>
          <ishsortfield name="ISHSCORE" ishorder="d" />
       </ishsort>
       <ishobjectfilters>
          <ishversionfilter>LatestVersion</ishversionfilter>
          <ishtypefilter>ISHModule</ishtypefilter>
          <ishtypefilter>ISHMasterDoc</ishtypefilter>
          <ishtypefilter>ISHLibrary</ishtypefilter>
          <ishlanguagefilter>en</ishlanguagefilter>
       </ishobjectfilters>
    </ishquery>
    "@
    Search-IshDocumentObj -XmlQuery $xmlQuery -Count

    If the escaping is not doing it, then I agree that the Search using the "contains" operator to get to an acceptable result and then filtering out the false positives is the best alternative.

    Best wishes,
    Dave

    emoji
Children