Skip to content

Commit

Permalink
docs: greatly improve readme w/ simplified examples and motivation
Browse files Browse the repository at this point in the history
  • Loading branch information
vladholubiev committed Dec 16, 2017
1 parent 2dced47 commit 13b2ac3
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 25 deletions.
11 changes: 9 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "es-painless-fields",
"version": "0.1.0",
"description": "Generate Painless Elasticsearch script to set / unset fields on document from JavaScript Object",
"description": "Helpers for bulk update Elasticsearch documents by query using Painless scripts",
"license": "MIT",
"repository": "vladgolubev/es-painless-fields",
"author": {
Expand All @@ -19,7 +19,14 @@
"files": [
"index.js"
],
"keywords": [],
"keywords": [
"elasticsearch",
"bulk update",
"update by query",
"painless",
"scripts",
"replace fields"
],
"dependencies": {},
"devDependencies": {
"jest": "^21.2.1"
Expand Down
41 changes: 18 additions & 23 deletions readme.md
Original file line number Diff line number Diff line change
@@ -1,57 +1,52 @@
# es-painless-fields [![Build Status](https://travis-ci.org/vladgolubev/es-painless-fields.svg?branch=master)](https://travis-ci.org/vladgolubev/es-painless-fields)

> Generate Painless Elasticsearch script to set / unset fields on document from JavaScript Object
> Helpers for bulk update Elasticsearch documents by query using Painless scripts
## Install

```
$ yarn add es-painless-fields
```

## Usage
## Features & Motivation

The main purpose is to utilize `_update_by_query` Elasticsearch API most efficiently.
API is limited to updating documents in-place by scripts, so you cannot rely on ES to replace document by passing partial parameters. This package aims to ease partial bulk document updates.

WIP: Currently only simple `set` and `replace` commands present.
* In-place **set** values to fields
* In-place **replace** values in fields
* **Zero** dependencies!
* ... to be done

## Usage

```js
const esClient = require('elasticsearch').Client();
const esPainlessFields = require('es-painless-fields');

const docUpdateScript = esPainlessFields.set({a: 1, b: 2});

/*
{
"lang": "painless",
"source": "ctx._source.a = params.a; ctx._source.b = params.b;",
"params": {
"a": 1,
"b": 2
}
}
*/
const painlessFields = require('es-painless-fields');

const script = painlessFields.set({a: 1, b: 2});

// Now we can perform a bulk update
esClient.updateByQuery({
conflicts: 'proceed',
body: {
query: {term: {user: 'kimchy'}},
script: docUpdateScript
query: {match_all: {}},
script
}
});

```

## API

### esPainlessFields.set(fieldsMap)
### .set(fieldsMap)

#### fieldsMap

Type: `Object`

Object fields which you would like to set.
Object fields which you would like to set. Example: `{a: 1, b: 2}`

### esPainlessFields.replace(fieldsReplacements)
### .replace(fieldsReplacements)

#### fieldsReplacements

Expand Down

0 comments on commit 13b2ac3

Please sign in to comment.