# frozen_string_literal: true require_relative '../lib/typesense' require 'awesome_print' require 'logger' AwesomePrint.defaults = { indent: -2 } ## ## Setup # ### Option 1: Start a single-node cluster # $ docker run -i -p 8108:8108 -v/tmp/typesense-server-data-1b/:/data -v`pwd`/typesense-server-peers:/typesense-server-peers typesense/typesense:0.19.0 --data-dir /data --api-key=xyz --listen-port 8108 --enable-cors # ### Option 2: Start a 3-node cluster # # Create file in present working directory called typesense-server-peers (update IP Addresses appropriately to your local network): # $ echo '172.17.0.2:8107:8108,172.17.0.3:7107:7108,172.17.0.4:9107:9108' > `pwd`/typesense-server-peers # # Start node 1: # $ docker run -i -p 8108:8108 -p 8107:8107 -v/tmp/typesense-server-data-1b/:/data -v`pwd`/typesense-server-peers:/typesense-server-peers typesense/typesense:0.19.0 --data-dir /data --api-key=xyz --listen-port 8108 --peering-port 8107 --enable-cors --nodes=/typesense-server-peers # # Start node 2: # $ docker run -i -p 7108:7108 -p 7107:7107 -v/tmp/.typesense-server-data-2b/:/data -v`pwd`/typesense-server-peers:/typesense-server-peers typesense/typesense:0.19.0 --data-dir /data --api-key=xyz --listen-port 7108 --peering-port 7107 --enable-cors --nodes=/typesense-server-peers # # Start node 3: # $ docker run -i -p 9108:9108 -p 9107:9107 -v/tmp/.typesense-server-data-3b/:/data -v`pwd`/typesense-server-peers:/typesense-server-peers typesense/typesense:0.19.0 --data-dir /data --api-key=xyz --listen-port 9108 --peering-port 9107 --enable-cors --nodes=/typesense-server-peers # # Note: Be sure to add `--license-key=<>` at the end when starting a Typesense Premium server ## # Create a client @typesense = Typesense::Client.new( nodes: [ { host: 'localhost', port: 8108, protocol: 'http' } # Uncomment if starting a 3-node cluster, using Option 2 under Setup instructions above # { # host: 'localhost', # port: 7108, # protocol: 'http' # }, # { # host: 'localhost', # port: 9108, # protocol: 'http' # } ], # If this optional key is specified, requests are always sent to this node first if it is healthy # before falling back on the nodes mentioned in the `nodes` key. This is useful when running a distributed set of search clusters. # 'nearest_node': { # 'host': 'localhost', # 'port': '8108', # 'protocol': 'http' # }, api_key: 'xyz', num_retries: 10, healthcheck_interval_seconds: 1, retry_interval_seconds: 0.01, connection_timeout_seconds: 10, logger: Logger.new($stdout), log_level: Logger::INFO )