Просмотр исходного кода

Implemented SearchDelegator interface on ElasticSearchDelegator

Taichi Masuyama 4 лет назад
Родитель
Сommit
04c5b36be1

+ 2 - 4
packages/app/src/server/interfaces/search.ts

@@ -16,12 +16,10 @@ export interface SearchResolver {
 
 export interface SearchDelegator<T = unknown> {
   name: SearchDelegatorName
-  search(queryString: string | null, user, userGroups, option): PaginateResult<T> & MetaData
+  search(queryString: string | null, user, userGroups, option): Promise<Result<T> & MetaData>
 }
 
-export type PaginateResult<T> = {
-  limit: number
-  offset: number
+export type Result<T> = {
   data: T
 }
 

+ 7 - 4
packages/app/src/server/service/search-delegator/elasticsearch.ts

@@ -9,6 +9,7 @@ import streamToPromise from 'stream-to-promise';
 import { createBatchStream } from '../../util/batch-stream';
 import loggerFactory from '~/utils/logger';
 import { PageDocument, PageModel } from '../../models/page';
+import { MetaData, SearchDelegator, Result } from '../../interfaces/search';
 
 const logger = loggerFactory('growi:service:search-delegator:elasticsearch');
 
@@ -16,7 +17,9 @@ const DEFAULT_OFFSET = 0;
 const DEFAULT_LIMIT = 50;
 const BULK_REINDEX_SIZE = 100;
 
-class ElasticsearchDelegator {
+type Data = any;
+
+class ElasticsearchDelegator implements SearchDelegator<Data> {
 
   configManager!: any
 
@@ -538,7 +541,7 @@ class ElasticsearchDelegator {
    *   data: [ pages ...],
    * }
    */
-  async search(query) {
+  async searchKeyword(query) {
     // for debug
     if (process.env.NODE_ENV === 'development') {
       const result = await this.client.indices.validateQuery({
@@ -832,7 +835,7 @@ class ElasticsearchDelegator {
     };
   }
 
-  async searchKeyword(queryString, user, userGroups, option) {
+  async search(queryString: string, user, userGroups, option): Promise<Result<Data> & MetaData> {
     const from = option.offset || null;
     const size = option.limit || null;
     const query = this.createSearchQuerySortedByScore();
@@ -844,7 +847,7 @@ class ElasticsearchDelegator {
 
     await this.appendFunctionScore(query, queryString);
 
-    return this.search(query);
+    return this.searchKeyword(query);
   }
 
   parseQueryString(queryString: string) {

+ 2 - 11
packages/app/src/server/service/search.ts

@@ -154,17 +154,8 @@ class SearchService implements SearchQueryParser, SearchResolver {
   }
 
   async parseSearchQuery(_queryString: string): Promise<ParsedQuery> {
-    // do not reassign queryString
-    let queryString = _queryString.trim();
-    queryString = _queryString.replace(/\s+/, ' ');
-    const namedQueryRegExp = new RE2(/^\[nq:.+\]$/g); // https://regex101.com/r/FzDUvT/1
-
-    const queryParts = queryString.split(' ');
-    const nqNames = queryParts
-      .filter(str => namedQueryRegExp.test(str)) // filter by regexp
-      .map(str => str.replace(/\[|\]/g, '')); // remove []
-
-    return { queryString, nqNames };
+    // TODO: impl parser
+    return {} as ParsedQuery;
   }
 
   async resolve(parsedQuery: ParsedQuery): Promise<SearchDelegator> {