@cytex/elastictype
A Object Document Mapping (ODM) manager for Elasticsearch written in TypeScript.
Can't wait to use it? Feel free to contribute.
📝 Table of Contents
- About
- Getting Started
- Features
- Prerequisites
- Installing
- Tests
- Usage
- Built Using
- Authors
- Acknowledgments
🧐 About
Elastictype is a easy way to model application data stored in Elasticsearch. It is inpsired by mongoose and @nestjs/mongoose and thus includes type casting, validation, query building, hooks and much more. It is written in TypeScript and thus provides type safety.
🏁 Features
- Type casting
- Validation
- Query building
- Hooks
- Type safety
- Intuitive index declaration via Decorators
🏁 Getting Started
These instructions will get you a copy of the project up and running on your local machine for development and testing purposes.
Prerequisites
Please make sure you have installed the following tools:
- Node.js - JavaScript runtime environment
- Elasticsearch - Search engine
Installing
Install the package via npm:
npm install @cytex/elastictype --save
or via yarn:
yarn add @cytex/elastictype
🎈 Usage
Basic usage
import {
BaseSchema,
ElasticField,
ElasticDataType,
Index,
Model,
} from "@cytex/elastictype";
@Index({
name: "cats", // Name of the index
})
export class Cat extends BaseSchema<Cat> {
@Prop(ElasticDataType.Keyword)
public name: string;
@ElasticField({
// Type of the field (used for explicit mapping declaration)
type: ElasticDataType.Integer,
})
public age: number;
}
// Create the index and the mapping in Elasticsearch
Cat.syncMapping();
// Create a new cat
const cat = new Cat();
cat.name = "Garfield";
cat.age = 42;
// Save the cat to Elasticsearch
await cat.save();
// Update the cat
await cat.update({ age: 43 });
// Delete the cat
await cat.delete();
// Find all cats
const cats = await Cat.find({ age: 43 });
// Find a cat by id
const cat = await Cat.findById("foo");
🔧 Running the tests
Tests are written with jest. You can run them with the following command:
npm run test
⛏️ Built Using
- TypeScript - Programming language
- Jest - Testing framework
- Elasticsearch JS - Elasticsearch client for Node.js
- Nestjs - Node.js framework
✍️ Authors
- @cytex-media-solutions - Project author
- @sjutz - Project maintainer simon.jutz@cytex.ch
🎉 Acknowledgements
- Nestjs - Node.js framework
- mongoose - MongoDB object modeling for Node.js
- @nestjs/mongoose - Mongoose module for Nest framework (not used in this project but inspired by it)