ElasticUI - 使用ng-click触发搜索/排序

时间:2014-07-07 18:43:37

标签: javascript angularjs elasticsearch

这是从我和作者之间的电子邮件线程中获取的。我已将其从电子邮件转移到SO,希望它可能使其他人受益。可以找到ElasticUI here

我的原始问题

  
      
  1. 我看到eui-enabled的搜索结果为querystring.length。我们希望按钮触发搜索和排序,而不是   观看功能。
  2.   
  3. 当搜索没有返回结果时,它有点混乱。它只是返回deafualt(全部)而不是no results found消息   结果。是否可以将结果默认为空   还是全部退货?
  4.   

作者的回答

  

1 + 2 - 这都是可能的。在AngularJS中,请记住" model"   您使用的变量并连接到您的UI /指令   以下几行是有意义的

<div eui-query="ejs.MatchQuery('textField', querystring)" eui-enabled="querystring.length"> <input type="text" ng-model="querystring_live" />

<input type="button" ng-click="querystring=querystring_live" /> </div>
<div ng-if="!querystring.length"> No query specified </div>
     

请注意点击后会发生什么。您还可以包装ng-if子句   你周围的结果是只在查询时显示结果   指定。

当我添加此代码段时,ng-if条件无法执行(&#34;未指定查询&#34;始终停留),并且在提交搜索后,结果为空,甚至如果它的查询我确定应该返回结果。

对角度有所了解,一个明显的错误可能会超过我的头脑。是否有任何明显缺失的东西?

修改 发现问题:忘记填写用于运行查询的字段:eui-query="ejs.MatchQuery('post_title', querystring)"(&#39; post_title&#39;是ES字段)

1 个答案:

答案 0 :(得分:3)

虽然看起来你可能已经找到了答案,但我认为这仍然是作者答案中的一个错误&#34; (我)你发布在上面。好像我为dot-problem in Angular而堕落。这应该更好:

<div ng-init="qs_model={live:'', after_click:''}">
            Debug: {{qs_model | json}}
            <h3>Search</h3>
            <div eui-query="ejs.MatchQuery('tweet.text', qs_model.after_click)" eui-enabled="qs_model.after_click.length">                             
                <input type="text" ng-model="qs_model.live" />
                <input type="button" ng-click="qs_model.after_click=qs_model.live" /> 
            </div>
            <div ng-if="!qs_model.after_click.length">No query specified </div>
        </div>

在控制器中定义qs_model更加清晰,而不是上面演示的ng-init。

另请注意,即使禁用了eui-query(未指定查询字符串),ElasticUI此时仍将在后台执行MatchAll查询(您可以选择使用ng-if隐藏结果)。