cancel
Showing results for 
Search instead for 
Did you mean: 
cancel
812
Views
4
Helpful
3
Replies
Cisco Employee

Context Service Search

I will be starting a project for a customer that will make use of a number of Context Service features, including the "Search" capability. I've been experimenting with the current version (2.0.2) of Context Service's Search. I'd like to share my experiences and questions. I'd also like to get a summary of how the Search capability is currently working within Context Service 2.0.2.

I use custom fields and field sets in my Context Service objects. All of the fields are defined as follows:

  • publiclyAccessible: false
  • searchable: true
  • dataType: string
  • classification: ENCRYPTED

The special search keys seem to work very well and are quite predictable. However, searching based on the contents of fields seems strange.

For example, if I search for all Customer objects that contain the value "Ace" in the Field "MAR_NEW_001_USERNAME", then I successfully retrieve my single Customer object.

However, if I search for all Customer objects that contain the value "MAR" in the Field "MAR_NEW_001_USERNAME", then I get back a large number of records, none of which contain the value "MAR" in the "MAR_NEW_001_USERNAME" field. All of the records that I get back contain the value "MAR" in some other field. Any idea how I can control this better?

Everyone's tags (1)
3 REPLIES 3
Highlighted
Beginner

Re: Context Service Search

Hi Joseph,

   Can you share the query your using to perform the search?

Thanks,

  Damon

Highlighted
Cisco Employee

Re: Context Service Search

The issue can be seen in the number of objects returned in the following code. Passing the two arguments "MAR_NEW_001_USERNAME" and "Ace" into the code will return a single Customer object (as expected). Passing the two arguments "MAR_NEW_001_USERNAME" and "MAR" into the code will return many Customers, Pods, and Requests (not as expected). The latter set of arguments should not return any objects.

    public static void main (final String [] args)

    {

        if ((args.length < 2) || (0 != (args.length % 2)))

            SearchContextServiceStrange.usage ();

        boolean errored = false;

        try

        {

            CSConnection csConnection = null;

            try

            {

                csConnection = (CSConnection) DatabaseConnection.instance ().getConnection (CSConnection.CONNECTION_TYPE);

                final Connection connection = csConnection.getConnection ();

                final SearchParameters params = new SearchParameters ();

                for (int index = 0; index < args.length; index += 2)

                {

                    final String fieldName = args[index];

                    final String value = args[index + 1];

                    System.out.println ("Value: " + value);

                    params.add (fieldName, value);

                }

                final List < Customer > list1 = connection.getContextServiceClient ().search (Customer.class, params, com.cisco.thunderhead.client.Operation.AND);

                System.out.println ("Found " + list1.size () + " Customer(s)");

                for (final Customer bean : list1)

                    System.out.println (bean.getId ());

                final List < Request > list2 = connection.getContextServiceClient ().search (Request.class, params, com.cisco.thunderhead.client.Operation.AND);

                System.out.println ("Found " + list2.size () + " Requests(s)");

                for (final Request bean : list2)

                    System.out.println (bean.getId ());

                final List < Pod > list3 = connection.getContextServiceClient ().search (Pod.class, params, com.cisco.thunderhead.client.Operation.AND);

                System.out.println ("Found " + list3.size () + " Pod(s)");

                for (final Pod bean : list3)

                    System.out.println (bean.getId ());

            }

            catch (Exception | Error e)

            {

                errored = true;

                System.err.println ("Could not search Context Service -- Marked connection as bad: " + e);

                throw new PoolLogicException (e.getMessage () + ": " + e.getCause ());

            }

            finally

            {

                if (null != csConnection)

                    DatabaseConnection.instance ().returnConnection (csConnection, true); // Force a close() on the connection

                DatabaseConnection.instance ().shutdown ();

            }

        }

        catch (SQLException | PoolLogicException e)

        {

            errored = true;

            System.err.println ("Problem searching: " + e);

        }

        System.exit (errored ? -1 : 0);

    }

Highlighted
Cisco Employee

Re: Context Service Search

Thanks to Tom Weissinger, this issue has been SOLVED. The core issue was that I was using the 2.0.2 version of the sdk extensions JAR file where I should have been using the 2.0.3 version of the sdk extensions JAR file.

Please make sure that you are using the latest and greatest versions of the Context Service JAR files.

CreatePlease to create content
Content for Community-Ad
FusionCharts will render here