03-16-2017 12:18 PM
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:
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?
03-16-2017 01:08 PM
Hi Joseph,
Can you share the query your using to perform the search?
Thanks,
Damon
03-17-2017 08:45 AM
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);
}
03-21-2017 07:07 AM
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.
Discover and save your favorite ideas. Come back to expert answers, step-by-step guides, recent topics, and more.
New here? Get started with these tips. How to use Community New member guide