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.

 Copy Code
            // 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");
                    }
                }
            }
            

See Also