An open API service indexing awesome lists of open source software.

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

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
```