Return all search results which are exact matches and a constant number of records which are inexact.
Namespace: NetricsServerInterface
Assembly: NetricsServerInterface (in NetricsServerInterface.dll)
Syntax
Visual Basic (Declaration) |
---|
Public Sub useExactPlusScoreCutoff( _ ByVal val As Integer _ ) _ Implements INetricsSearchOpts.useExactPlusScoreCutoff |
C# |
---|
public void useExactPlusScoreCutoff( int val ) |
C++ |
---|
public: void useExactPlusScoreCutoff( int val ) sealed |
J# |
---|
public void useExactPlusScoreCutoff( int val ) |
JScript |
---|
public
function useExactPlusScoreCutoff( val : int ) |
Parameters
- val
- The number of records to return in addition to the exact matches.
Implements
INetricsSearchOpts.useExactPlusScoreCutoff
Remarks
Because it is inappropriate to cut off search results at a static score threshold, there are several configurable dynamic methods which can be used. All cutoffs will use the score type specified in the scoreType property. Only one cutoff may be used at a time. The most recent cutoff specified is the one that will be used.
This cutoff returns all exact matches plus a constant number of records.
Example
This sample code shows how to specify search options such as useExactPlusScoreCutoff to limit the the size of the output on a multi-query operation.
![]() | |
---|---|
// This is an example of using some search options with a multi-query where different query strings // can be used in a search across different fields within a table. This requires first configuring a // Simple query for each query string along with the fields to be searched and then either "And" or "Or" // them together. // // In this we will query the "names" table using a query string against the "last" field and a another // query string against the "first" field. Each of these queries are referred to as a querylet. We will // apply a higher weight to the "last" field querylet. using System; using NetricsServerInterface; class MyClass { private static NetricsServerInterface.NetricsServerInterface si = null; public static void Main() { try { String host = "localhost"; int port = 5051; si = new NetricsServerInterface.NetricsServerInterface(host, port); // Table is the TIBCO Patterns Engine table to be search/matched against query String table = "names"; // Going to use 2 NetricsQuery for the search configuration NetricsQuery[] nqs = new NetricsQuery[2]; // Create NetricsSearchOpts object and then set some options NetricsSearchOpts opts = new NetricsSearchOpts(); // Set the search to SYMMETRIC scoring mode opts.scoreType((int)NetricsSearchOpts.score_types.SCORE_SYMMETRIC); // Set cutoff to exact matches plus the next 3 highest similarity score opts.useExactPlusScoreCutoff(3); // Set Empty Score to .2, eg. if field contains no data then use .2 score rather than 0. opts.setEmptyScore(.2); // Create the NetricsSearchCfg pointing to the table to be searched/matched against NetricsSearchCfg tblCfg = new NetricsSearchCfg(table); // Query will contain the query string for the first querylet which is "last String query = "brown"; // FieldNames contain the fields within the table to be searhed/matched against. // If fieldNames is set to null then all fields will be searched/matched against String[] fieldNames = { "last" }; // Create a Simple query for the "last" names search nqs[0] = NetricsQuery.Simple(query, fieldNames, null); // Set up the second Simple query query = "dennis"; fieldNames[0] = "first"; nqs[1] = NetricsQuery.Simple(query, fieldNames, null); // QueryletWeights is an array that must be the same length as the number of querylets // and is the weight applied to each querylet in the search which impacts the similarity // scrore. In this case there will be two querylets that will be ANDed together to create // a single search configuration double[] queryletWeights = { 1.0, .5 }; // Now AND the two Simple querys together to create the final NetricsQuery for the search NetricsQuery nqAnded = NetricsQuery.And(queryletWeights, nqs); // Set the NetricsSearchCfg; tblCfg.setNetricsQuery(nqAnded); // Perform the search/match using the NetricsSearchCfg and NetricsSearchOpts NetricsSearchResponse resp = si.search(tblCfg, opts); String s = ""; // Get the results of the search/match NetricsSearchResult[] res = resp.getSearchResults(); // Create viables for result processing String[] xfieldNames; String[] xfields; // Iterate through the result records for (int i = 0; i < res.Length; i++) { // Get the fieldNames in the result record xfieldNames = res[i].getFieldNames(); // Get the data for each fieldName in result record xfields = res[i].getFields(); // Get the score for this result record double score = res[i].getMatchScore(); // Build the printline for the result record s = s + "Rank=" + i + ", Score=" + score.ToString(); for (int x = 0; x < xfields.Length; x++) { s = s + ", " + xfieldNames[x] + "=" + xfields[x]; } s = s + "\n"; } Console.WriteLine(s); } catch (NetricsException e) { Console.Write(e.getErrorDescription() + "\n"); } } } |