Мне трудно понять, как использовать Elasticsearch (5.x) с Angular 4.
Я установил клиент ES JS через npm, а также установил определения типов через npm install --save @types/elasticsearch.
Я пытаюсь использовать NgbBootstrap Typeahead для автозаполнения. Однако я продолжаю получать эту ошибку ERROR Error: Cannot find a differ supporting object '[object Object]' of type 'object'
Поэтому я играл с функцией formatMatches для форматирования ввода/вывода, потому что мой сервис возвращает {}
вместо []
. Кажется, ничего не работает.
formatMatches = (query: any) => query.hits.**hits**._source.suggestions || '';
Второй хит — это массив, содержащий {"_source": {"suggestions": "suggestion_text"}
Итак, теперь я думаю, что, возможно, мой сервис не совсем правильный, потому что я в основном использую тот же HTML, что и NgbBootstrap.
вот мой сервис
@Injectable()
export class Elasticsearch {
private results: Observable<Suggestion[]>;
//private clientElasticsearch: Client;
private esClient: Client;
constructor() {
//this.clientElasticsearch = new Client({
this.esClient = new Client({
host: 'http://localhost:9200',
apiVersion: '5.x',
log: 'trace'
});
}
//public test_search(value): Observable<SearchResponse<{}>> {
public search(query): Observable<SearchResponse<{}>> {
return Observable.fromPromise(<Promise<SearchResponse<{}>>>
this.esClient.search({
index: 'query-index',
body: {
"query": {
"match_phrase_prefix": {
"suggestions": {
"query": query,
"max_expansions": 10
//"lenient": true
}
}
},
"size": 5,
"from": 0,
"_source": ["suggestions"]
}
}));
}
}
Я начинаю думать, что мне не обязательно использовать клиент ES JS через npm, потому что я знаю, что клиент js создан для работы с промисами. Могу ли я просто использовать веб-API, например это а>?