ElasticSearch ajax请求始终返回相同的结果

时间:2015-04-28 23:25:07

标签: ajax elasticsearch jsonp

我正在尝试使用ajax查询ElasticSearch,但我总是得到相同的结果,即使我更改查询它仍然相同。似乎匹配部分没有被执行。因为如果我添加更多字段,例如发布日期,我就会获得该数据。

这是html代码:

<html>
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
        <h1>Search Result!</h1>
        <br />
        <input id="searchterm" />
    <button id="search">search</button>
    <div id="results"></div>
    <script>
      $("#search").click(function(e){
        var data = {
                query:{match:{_all:$('#searchterm').val()}},
                pretty: true,
                fields: '_id'
                };

                alert(JSON.stringify(data));

              $.ajax({
                url: 'http://localhost:9200/movies/_search',
                dataType: 'jsonp',
                type: 'POST',
                crossDomain: true,
                data: data,
               success: function(data) {
                  //alert(""+JSON.parse(data.hits.total));
                  $("#results").empty();
                  $("#results").append("<p>Results for <b>" + $("#searchterm").val() + "</b></p>");
                  $.each(data.hits.hits, function(i,item){
                    $("#results").append("<div><a href='#'>" + item._id + "</a></div>");
                  });
                }
              });
            });
    </script>

</body>
</html>

输出:

搜索结果!

愤怒

的结果

叛乱分子(2015年)

星球大战:第七集 - 原力觉醒(2015)

Ant-Man(2015)

侏罗纪世界(2015)

灰姑娘(2015)

Daredevil(2003)

努力学习(2015)

复仇者联盟:奥创纪元(2015)

Batman v Superman:Dawn of Justice(2016)

主页(2015)

结果与输入的关键字无关,输出应该是电影名称中包含愤怒的所有电影。但是,我仍然会收到前10部电影。

任何建议都可能是一个很大的帮助。

1 个答案:

答案 0 :(得分:1)

我得到了这个工作,我已经列出了下面的更改:

  1. 将jsonp更改为json
  2. 添加了contentType:&#39; application / json&#39;在ajax请求中
  3. 从数据中删除pretty:true,因为它提供了解析错误。
  4. 将数据格式更改为JSON.stringify(data)
  5. 通过监控chrome开发人员工具中的请求标头进行分析。

    以下是工作代码:

    <html>
    <head>
    <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
    </head>
    <body>
            <h1>Search Result!</h1>
            <br />
            <input id="searchterm" />
        <button id="search">search</button>
        <div id="results"></div>
        <script>
          $("#search").click(function(e){
            var data = {
                    query:{match:{_all:$('#searchterm').val()}},
                    fields: '_id'
                    };
    
                    alert(JSON.stringify(data));
    
                  $.ajax({
                    url: 'http://localhost:9200/movies/_search',
                    dataType: 'json',
                    type: 'POST',
                    contentType: 'application/json',
                    crossDomain: true,
                    data: JSON.stringify(data),
                   success: function(data) {
                      //alert(""+JSON.parse(data.hits.total));
                      $("#results").empty();
                      $("#results").append("<p>Results for <b>" + $("#searchterm").val() + "</b></p>");
                      $.each(data.hits.hits, function(i,item){
                        $("#results").append("<div><a href='#'>" + item._id + "</a></div>");
                      });
                    }
                  });
                });
        </script>
    
    </body>
    </html>
    

    我希望它有所帮助。

相关问题