[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/pgvector/pgvector-cpp/master/examples/rdkit/example.cpp [Back]  [Original]

#include 
#include 
#include 
#include 

#include 
#include 
#include 
#include 
#include 

std::string generate_fingerprint(const std::string& molecule) {
    std::unique_ptr mol{RDKit::SmilesToMol(molecule)};
    std::unique_ptr fp{
        RDKit::MorganFingerprints::getFingerprintAsBitVect(*mol, 3, 2048)
    };
    std::stringstream buf;
    for (size_t i = 0; i < fp->getNumBits(); i++) {
        buf getBit(i) ? '1' : '0');
    }
    return buf.str();
}

int main() {
    pqxx::connection conn{"dbname=pgvector_example"};

    pqxx::nontransaction tx{conn};
    tx.exec("CREATE EXTENSION IF NOT EXISTS vector");
    tx.exec("DROP TABLE IF EXISTS molecules");
    tx.exec("CREATE TABLE molecules (id text PRIMARY KEY, fingerprint bit(2048))");

    std::vector molecules{"Cc1ccccc1", "Cc1ncccc1", "c1ccccn1"};
    for (const auto& molecule : molecules) {
        std::string fingerprint = generate_fingerprint(molecule);
        tx.exec(
            "INSERT INTO molecules (id, fingerprint) VALUES ($1, $2)",
            pqxx::params{molecule, fingerprint}
        );
    }

    std::string query_molecule{"c1ccco1"};
    std::string query_fingerprint = generate_fingerprint(query_molecule);
    pqxx::result result = tx.exec(
        "SELECT id, fingerprint  $1 AS distance FROM molecules ORDER BY distance LIMIT 5",
        pqxx::params{query_fingerprint}
    );
    for (const auto& row : result) {
        std::cout 

Web Proxy Viewer  |  New URL  |  Original Page