Implement ElasticSearch search engine

* Adding indexing, searching and default translator for ElasticSearch engine
* Modifying default backend to use ES if it is enabled
* Adding configuration schema to configure ElasticSearch 3 different ways
   * Elastic.co hosted solution
   * AWS hosted ElasticSearch Service
   * Custom, using standard ElasticSearch URL and auth info
* Add and modify some of the documentation regarding search

Signed-off-by: Jussi Hallila <jussi@hallila.com>
This commit is contained in:
Jussi Hallila
2021-07-21 16:45:16 +02:00
parent 2ce0b4ca0d
commit d9c13d535b
24 changed files with 1385 additions and 58 deletions
@@ -18,13 +18,13 @@ import {
DocumentCollator,
DocumentDecorator,
IndexableDocument,
SearchEngine,
} from '@backstage/search-common';
import { Logger } from 'winston';
import { Scheduler } from './index';
import {
RegisterCollatorParameters,
RegisterDecoratorParameters,
SearchEngine,
} from './types';
interface CollatorEnvelope {
@@ -16,7 +16,7 @@
import { getVoidLogger } from '@backstage/backend-common';
import lunr from 'lunr';
import { SearchEngine } from '../types';
import { SearchEngine } from '@backstage/search-common';
import { ConcreteLunrQuery, LunrSearchEngine } from './LunrSearchEngine';
/**
@@ -18,10 +18,11 @@ import {
IndexableDocument,
SearchQuery,
SearchResultSet,
QueryTranslator,
SearchEngine,
} from '@backstage/search-common';
import lunr from 'lunr';
import { Logger } from 'winston';
import { QueryTranslator, SearchEngine } from '../types';
export type ConcreteLunrQuery = {
lunrQueryBuilder: lunr.Index.QueryBuilder;
+5 -1
View File
@@ -17,4 +17,8 @@
export { IndexBuilder } from './IndexBuilder';
export { Scheduler } from './Scheduler';
export { LunrSearchEngine } from './engines';
export type { SearchEngine } from './types';
/**
* @deprecated Import from @backstage/search-common instead
*/
export type { SearchEngine } from '@backstage/search-common';
+1 -35
View File
@@ -14,13 +14,7 @@
* limitations under the License.
*/
import {
DocumentCollator,
DocumentDecorator,
IndexableDocument,
SearchQuery,
SearchResultSet,
} from '@backstage/search-common';
import { DocumentCollator, DocumentDecorator } from '@backstage/search-common';
/**
* Parameters required to register a collator.
@@ -46,31 +40,3 @@ export interface RegisterDecoratorParameters {
*/
decorator: DocumentDecorator;
}
/**
* A type of function responsible for translating an abstract search query into
* a concrete query relevant to a particular search engine.
*/
export type QueryTranslator = (query: SearchQuery) => unknown;
/**
* Interface that must be implemented by specific search engines, responsible
* for performing indexing and querying and translating abstract queries into
* concrete, search engine-specific queries.
*/
export interface SearchEngine {
/**
* Override the default translator provided by the SearchEngine.
*/
setTranslator(translator: QueryTranslator): void;
/**
* Add the given documents to the SearchEngine index of the given type.
*/
index(type: string, documents: IndexableDocument[]): Promise<void>;
/**
* Perform a search query against the SearchEngine.
*/
query(query: SearchQuery): Promise<SearchResultSet>;
}