Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/nextapps-de/flexsearch-server
High-performance FlexSearch Server for Node.js (Cluster)
https://github.com/nextapps-de/flexsearch-server
clustering node-module nodejs server
Last synced: 3 months ago
JSON representation
High-performance FlexSearch Server for Node.js (Cluster)
- Host: GitHub
- URL: https://github.com/nextapps-de/flexsearch-server
- Owner: nextapps-de
- Created: 2019-01-30T01:28:10.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2019-02-03T22:05:58.000Z (almost 6 years ago)
- Last Synced: 2024-04-27T00:41:45.366Z (9 months ago)
- Topics: clustering, node-module, nodejs, server
- Language: JavaScript
- Homepage:
- Size: 126 KB
- Stars: 187
- Watchers: 10
- Forks: 18
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
High-performance FlexSearch Server for Node.js
A full documentation of FlexSearch is available here: https://github.com/nextapps-de/flexsearch
#### Cluster (Vertical Scaling)
FlexSearch Server actually use Node.js Clusters and a Connection Pool to balance all incoming load through the workers.
> The performance gain of workers depends on the complexity of the index and how much time a query takes.
For most situations disabled workers performs a lot better, e.g.:
Single Thread
(Request per seconds)
Cluster
(Request per seconds)
Query Time < 10 ms
6122
1215
Query Time > 1000 ms
114
1041
__Note:__ A query time of 10 ms is already based on a large index.
#### Sharding / Replication (Horizontal Scaling)
Basically the current codebase has all requirements to provide also scaling in horizontal direction. If this project gains popularity I will made an implementation and also provide some docker bindings for an out-of-the-box installation.
```npm
npm install flexsearch-server
```Run setup once when not installing via "npm install":
```node
npm run setup
```Run as a single web server:
```node
npm start
```Run as a server cluster:
```node
npm run cluster
```Run with a specified environment:
```node
npm start production
``````node
npm run cluster test
```The server is listening at:
Environment
Server Address
development
http://localhost
production
http://localhost:6780
https://localhost:6780
test
http://localhost
> The default port for production is __6780__ (over HTTP) and __6781__ (over HTTPS), you can change the default ports in the configs.
> When _NODE_ENV_ is set, all manual passed environments will be overridden.
__RESTful__
Request Type
Endpoint
Description
GET
/
Returns info about the index
POST
/add/:id/:content
Add content to the index
POST
/update/:id/:content
Update content of the index
GET
/search/:query
Search for query
POST
/remove/:id
Remove id from the index
__JSON__
Request Type
Endpoint
Body
Description
POST
/add
JSON
Add multiple contents to the index
POST
/update
JSON
Update multiple contents of the index
GET
/search
JSON
Search for query (custom search)
POST
/remove
JSON
Remove multiple ids from the index
## Server Environment Variables
Variable
Values
Default
Description
PORT
integer
80 (development)
6780 (production)
Server listening port
PORT_SSL
integer
443 (development)
6781 (production)
Server listening port
SSL
true
false
false
Starts a HTTPS server (additionally to HTTP)
FORCE_SSL
true
false
false
Accept HTTPS connections only
COMPRESS
true
false
true
Enable/Disable response compression (gzip)
WORKER
integer
"auto"
"auto"
Sets the number of workers or automatically determine available cpus
AUTOSAVE
integer
false
10000
Enables persistent handler. Set the delay in milliseconds or disable by setting to false
When you do not pass any custom options, the environment will be inherited from _NODE_ENV_ by default.
Override the current environment (_NODE_ENV_) by adding a field in the root of `package.json`:
```json
"flexsearch": "production" // development, test
```Or add a config payload in the root of `package.json`:
> The field "client" holds the flexsearch options
```json
"flexsearch": {
"server": {
"debug": true,
"port": 80,
"port_ssl": 443,
"force_ssl": false,
"https": true,
"compress": true,
"autosave": 2000,
"worker": "auto"
},
"client": {
"async": false,
"cache": 0,
"worker": 4
}
}
```Or provide a config json file for each environment respectively and pass file locations:
> You can also provide a config json file to override the default settings globally.
```json
"flexsearch": {
"development": "config/development.json",
"production": "config/production.json",
"test": "config/test",
"default": "config/default.json"
}
```Or just provide a ___flexsearch.json___ in the root of your project.
Turn on persistence by setting a numeric value as delay on _config.autosave_. Flexsearch will automatically save the index to the local filesystem and also loads it when starting.
Disable persistence by setting this field to _false_.
## Setup SSL for HTTPS ConnectionsInside the folder _cert_ add the certificate as a .crt file and the key as a .pem file for each environment respectively.
__Development Environment:__
_cert/development.crt_
_cert/development.pem___Production Environment:__
_cert/production.crt_
_cert/production.pem_You can increase workers without any drawbacks, but when you decrease worker count, the old index doesnt restore completely from the filesystem. This will be fixed in an upcoming version. As long please do not decrease worker count when using persistent index.
---
Copyright 2019 Nextapps GmbH
Released under the Apache 2.0 License