https://github.com/itemsapi/elasticitems
Higher level client for Elasticsearch written in Node.js oriented on facets and simplicity
https://github.com/itemsapi/elasticitems
client elasticsearch facets sorting
Last synced: 8 months ago
JSON representation
Higher level client for Elasticsearch written in Node.js oriented on facets and simplicity
- Host: GitHub
- URL: https://github.com/itemsapi/elasticitems
- Owner: itemsapi
- License: apache-2.0
- Created: 2017-02-26T10:13:57.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2025-02-07T18:46:05.000Z (11 months ago)
- Last Synced: 2025-05-08T21:59:46.942Z (8 months ago)
- Topics: client, elasticsearch, facets, sorting
- Language: JavaScript
- Homepage:
- Size: 255 KB
- Stars: 20
- Watchers: 3
- Forks: 9
- Open Issues: 8
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# ElasticItems
Elasticsearch 7.x client for JS with faceted search, custom features and simple interface
## Features
- faceted search
- full text
- pagination
- sorting
## Getting Started
```bash
npm install elasticitems
```
```js
const elasticitems = require('elasticitems')(es_config, search_config);
elasticitems.search()
.then(result => {
console.log(result);
})
```
## API
### var elasticitems = ElasticItems(es_config, [search_config])
#### `es_config`
The first `es_config` is elasticsearch configuration object and contains values like `host`, `index` or `type`.
#### `search_config`
Responsible for defining global configuration.
* **aggregations** filters configuration i.e. for `tags`, `actors`, `colors`, etc. Responsible for generating facets.
* **sortings** you can configure different sortings like `tags_asc`, `tags_desc` with options and later use it with one key.
### elasticitems.search(options, [search_config])
#### `options`
* **per_page** amount of items per page.
* **page** page number - used for pagination.
* **query** used for full text search.
* **operator** search operator `and` and `or` (default). It works with `query` parameter
* **sort** used for sorting. one of `sortings` key
* **filters** filtering items based on specific aggregations i.e. {tags: ['drama' , 'historical']}
* **query_string** i.e. "brand:Audi OR brand:Mercedes"
* **facets_names** make faceted search only for specific fields i.e. ['tags', 'genres']
* **fields** search only in specifc fields i.e. ['name', 'description']. Missing parameter means search in all fields
* **ids** search by ids i.e. ['1', '2', '3']
* **exclude_ids** exclude ids from search i.e. ['1', '2', '3']
### elasticitems.similar(id, options)
Show similar items based on collaborative filtering
#### `options`
* **fields** i.e ['tags'].
### elasticitems.aggregation(options)
It returns full list of filters for specific aggregation
#### `options`
* **name** aggregation name
* **per_page** filters per page
* **size** how much load into memory (for pagination)
* **page** page number
* **sort** responsible for sorting mechanism. It can be `_count` or `_term`
* **order** responsible for an order. It can be `asc` or `desc`
* **filters** filter this aggregation through another aggregations (facets)
* **aggregation_query** used for quering filters. It's not full text search
* **query** search through items
* **query_string** search through items by query string i.e. (category:Garden and color:red)
### elasticitems.get(id)
Returns found record otherwise throw an error
### elasticitems.getBy(key, value)
Returns record based on key and value
### elasticitems.add(data, [options])
Add a new object into index. Provide your own `id` if you don't want it auto-generated
### elasticitems.partialUpdate(id, data, [options])
Updates object in index
### elasticitems.delete(id)
Delete object from index
### Notes
- Full text search does not work on `keyword` type because this type is not tokenized. `keyword` type is great for faceted fields
## Tests
```
npm test
```