package search;

import chemaxon.jchem.db.JChemSearch;
import chemaxon.sss.SearchConstants;
import chemaxon.sss.search.JChemSearchOptions;

/**
 * Example codes for ordering hits
 * 
 * @author Peter Kovacs
 * @author Tamas Csizmazia
 * @version 5.0.3, 04/26/2008
 * 
 */
public class HitsInSpecificOrder {

    public static void main(String[] args) {
	try {

	    SearchExampleBase.tableSetup();
	    
	    JChemSearchOptions jcSearchOptions = new JChemSearchOptions();

	    // When changing search type, it must be first to set!
	    jcSearchOptions.setSearchType(SearchConstants.SIMILARITY);
	    jcSearchOptions.setDissimilarityThreshold((float) 0.6);

	    String strTable = Util.structureTableName;
	    JChemSearch jChemSearch = InitializingSearch.createJChemSearch(
		    Connection.getConnectionHandler(1), "c1ccccc1N", 
		    strTable, jcSearchOptions);

	    // Change the default which is by similarity and id:
	    jChemSearch.setOrder(JChemSearch.ORDERING_BY_ID);
	    jChemSearch.run();

	    System.out.println(jChemSearch.getResultCount()
		    + " hit(s) found (in ID order)");
	    printOut(jChemSearch);

	    jChemSearch.getSearchOptions().setFilterQuery(
		    "select cd_id from " + strTable 
		    + " order by cd_molweight");
	    jChemSearch.run();
	    System.out.println();
	    System.out.println(jChemSearch.getResultCount()
		    + " hit(s) found (in molweight order)");
	    printOut(jChemSearch);
	} catch (Throwable throwable) {
	    throwable.printStackTrace();
	    System.exit(1);
	}
    }

    private static void printOut(JChemSearch jcs) {
	int[] cdIds = jcs.getResults();
	for (int i = 0; i < cdIds.length; i++) {
	    int cdId = cdIds[i];
	    float dissim = jcs.getDissimilarity(i);
	    System.out.println("cd_id: " + cdId 
		    + " dissimilarity: " + dissim);
	}
    }

}

Do you have a question? Would you like to learn more? Please browse among the related topics on our support forum or search the website. If you want to suggest modifications or improvements to our documentation email our support directly!