Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/nestjs/elasticsearch
Elasticsearch module based on the official elasticsearch package 🌿
https://github.com/nestjs/elasticsearch
elasticsearch nest nestjs nodejs typescript
Last synced: about 1 month ago
JSON representation
Elasticsearch module based on the official elasticsearch package 🌿
- Host: GitHub
- URL: https://github.com/nestjs/elasticsearch
- Owner: nestjs
- License: mit
- Created: 2018-06-24T10:01:20.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2024-04-12T14:29:15.000Z (7 months ago)
- Last Synced: 2024-04-14T09:34:46.870Z (7 months ago)
- Topics: elasticsearch, nest, nestjs, nodejs, typescript
- Language: TypeScript
- Homepage: https://nestjs.com
- Size: 3.23 MB
- Stars: 365
- Watchers: 6
- Forks: 50
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
[travis-image]: https://api.travis-ci.org/nestjs/nest.svg?branch=master
[travis-url]: https://travis-ci.org/nestjs/nest
[linux-image]: https://img.shields.io/travis/nestjs/nest/master.svg?label=linux
[linux-url]: https://travis-ci.org/nestjs/nest
A progressive Node.js framework for building efficient and scalable server-side applications.
## Description
Elasticsearch module for [Nest](https://github.com/nestjs/nest) based on the official [@elastic/elasticsearch](https://www.npmjs.com/package/@elastic/elasticsearch) package.
## Installation
```bash
$ npm i --save @nestjs/elasticsearch @elastic/elasticsearch
```## Usage
Import `ElasticsearchModule`:
```typescript
@Module({
imports: [ElasticsearchModule.register({
node: 'http://localhost:9200',
})],
providers: [...],
})
export class SearchModule {}
```Inject `ElasticsearchService`:
```typescript
@Injectable()
export class SearchService {
constructor(private readonly elasticsearchService: ElasticsearchService) {}
}
```## Async options
Quite often you might want to asynchronously pass your module options instead of passing them beforehand. In such case, use `registerAsync()` method, that provides a couple of various ways to deal with async data.
**1. Use factory**
```typescript
ElasticsearchModule.registerAsync({
useFactory: () => ({
node: 'http://localhost:9200'
})
});
```Obviously, our factory behaves like every other one (might be `async` and is able to inject dependencies through `inject`).
```typescript
ElasticsearchModule.registerAsync({
imports: [ConfigModule],
useFactory: async (configService: ConfigService) => ({
node: configService.get('ELASTICSEARCH_NODE'),
}),
inject: [ConfigService],
}),
```**2. Use class**
```typescript
ElasticsearchModule.registerAsync({
useClass: ElasticsearchConfigService
});
```Above construction will instantiate `ElasticsearchConfigService` inside `ElasticsearchModule` and will leverage it to create options object.
```typescript
class ElasticsearchConfigService implements ElasticsearchOptionsFactory {
createElasticsearchOptions(): ElasticsearchModuleOptions {
return {
node: 'http://localhost:9200'
};
}
}
```**3. Use existing**
```typescript
ElasticsearchModule.registerAsync({
imports: [ConfigModule],
useExisting: ConfigService,
}),
```It works the same as `useClass` with one critical difference - `ElasticsearchModule` will lookup imported modules to reuse already created `ConfigService`, instead of instantiating it on its own.
## API Spec
The `ElasticsearchService` wraps the `Client` from the official [@elastic/elasticsearch](https://www.npmjs.com/package/@elastic/elasticsearch) methods. The `ElasticsearchModule.register()` takes `options` object as an argument, [read more](https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/client-configuration.html).
## Support
Nest is an MIT-licensed open source project. It can grow thanks to the sponsors and support by the amazing backers. If you'd like to join them, please [read more here](https://docs.nestjs.com/support).
## Stay in touch
- Author - [Kamil Myśliwiec](https://twitter.com/kammysliwiec)
- Website - [https://nestjs.com](https://nestjs.com/)
- Twitter - [@nestframework](https://twitter.com/nestframework)## License
Nest is [MIT licensed](LICENSE).