使用AngularJS typeahead的Elasticsearch自动完成

时间:2016-06-06 15:23:16

标签: html angularjs

使用Elasticsearch和AngularJS UI bootstrap typeahead构建自动完成功能。几乎已经完成,但我无法在下拉列表中显示结果。

当我按下字母a时,下拉列表中出现的内容我知道有关于该字母的建议是:

[object Object]

这是我的控制器代码

$scope.getSuggestions = function(query) {
$scope.isSearching = true;
return searchService.getSuggestions(query).then(function(es_return){
    var phrases;
    var phrases = es_return.hits.hits;
    return $scope.autocomplete.suggestions = phrases;
    $scope.isSearching = false;
  });
};

这是我的html表单

<form ng-submit="search()" class="form-horizontal col-md-8 col-md-offset-2" id="hp-search-form">

                          

我正在使用ES match_phrase_prefix查询以及Shingles分析器,该分析器运行良好 - 在Sense中获得预期结果。如果我去ES的Sense插件,我在键入&#34; a&#34;时会收到很多回复,所以我知道这部分工作的ES部分。 UI bootstrap typeahead我哪里出错?

1 个答案:

答案 0 :(得分:0)

考虑到以下几行代码,您的方法存在两个问题:

library(dplyr)
library(tidyr)
library(stringi)

Monthlyresults %>%
  gather(Startdate, value, -Code) %>%
  mutate(Startdate = 
           Startdate %>%
           stri_sub(2) %>%
           as.numeric) %>%
  right_join(Generaldata)
  • 上面的第一行将return $scope.autocomplete.suggestions = phrases; $scope.isSearching = false; 作为数组,因此您将获得phrases作为输出。使用[object Object]替换它或检查您的控制台返回的内容。
  • 第二行将从不执行,因为它在执行之前将控件返回给调用者。这是一个孤儿的指示。

所以将代码更改为:

phrases[0]