Nest 官方提供了一套 ElasticSearch 模塊,來解決它與 ElasticSearch 服務器之間的交互。這篇文章你將學習到:
- 安裝
- 導入模塊
- 創建服務
- 使用
ElasticsearchService
查詢數據
- 使用
- 向外提供 RESTful 服務
安裝
還是老規矩:
npm i --save @nestjs/elasticsearch elasticsearch @types/elasticsearch
OR
yarn add @nestjs/elasticsearch elasticsearch @types/elasticsearch
導入模塊
安裝完成后,我們需要將 ElasticsearchModule
導入到 AppModule
:
// app.module.ts
import { Module } from '@nestjs/common';
import { ElasticsearchModule } from '@nestjs/elasticsearch';
@Module({
imports: [
ElasticsearchModule.register({
host: 'localhost:9200',
log: 'trace',
}),
],
})
export class AppModule { }
創建服務
我們創建一個搜索服務,并將 ElasticsearchService
注入到服務中使用相關查詢功能:
// search.service.ts
import { ElasticsearchService } from '@nestjs/elasticsearch';
import { Injectable } from '@nestjs/common';
@Injectable()
export class SearchService {
constructor(private readonly elasticsearchService: ElasticsearchService) { }
async search<T>(params) {
return await this.elasticsearchService.getClient().search<T>(params);
}
}
Elasticsearch
相關的搜索功能,我們可以去相關網站上查詢,它的 DSL 也可以從 Google 上搜索到。
向外提供 RESTful 服務
最后,我將這個服務通過 SearchController
暴露成 RESTful 接口:
// search.controller.ts
import { Controller, Get } from '@nestjs/common';
import { SearchService } from './search.service';
@Controller('search')
export class SearchController {
constructor(
private readonly searchService: SearchService,
) { }
@Get()
search() {
return this.searchService.search({
index: 'test_alias',
body: {
from: 0,
size: 10,
}
});
}
}
當然,這些 Service、Controller 需要注冊到相關的 Module 中去:
// app.module.ts
import { Module } from '@nestjs/common';
import { SearchService } from './search.service';
import { SearchController } from './search.controller';
import { ElasticsearchModule } from '@nestjs/elasticsearch';
@Module({
imports: [
ElasticsearchModule.register({
host: '10.5.11.86:9200',
log: 'trace',
}),
],
controllers: [SearchController],
providers: [SearchService],
})
export class AppModule { }
這樣,啟動并訪問 localhost:3000/search
,就大功告成了!
〖堅持的一俢〗