Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Ajax中实现弹性搜索过滤查询_Ajax_Search_Post_Filter_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch - Fatal编程技术网 elasticsearch,Ajax,Search,Post,Filter,elasticsearch" /> elasticsearch,Ajax,Search,Post,Filter,elasticsearch" />

在Ajax中实现弹性搜索过滤查询

在Ajax中实现弹性搜索过滤查询,ajax,search,post,filter,elasticsearch,Ajax,Search,Post,Filter,elasticsearch,我需要使用Ajax进行弹性搜索查询。我试图做的是搜索特定的类别名称,并返回与该类别关联的名称列表。弹性搜索的结构是每个_源都有一个名称字段(类别的名称)和一个项目字段。它还有name.raw,所以我可以按确切的名称搜索 这是我的要求: var query = { query: { filtered: { filter: { term: { "name.raw": category } }

我需要使用Ajax进行弹性搜索查询。我试图做的是搜索特定的类别名称,并返回与该类别关联的名称列表。弹性搜索的结构是每个_源都有一个名称字段(类别的名称)和一个项目字段。它还有name.raw,所以我可以按确切的名称搜索

这是我的要求:

var query = {
    query: {
        filtered: {
            filter: {
                term: { "name.raw": category }
            }
        }
    }
}

$.ajax({
    url: "http://192.168.0.240:9200/dropdowns/category/_search",
    type: 'post',
    dataType: 'json',
    success: function(data) {
        alert("Success");

    },
    error: function(data) {
        // should be only one item in hits
        $(data.hits.hits).each(function(index, hit) {
            alert(hit._source.items);
        });
    },
    data: query
});

现在,我只是想让它工作得足够好,以提醒我在命中的项目。我收到一个错误的400请求。我的Ajax调用有什么问题?

使用以下代码:

var query = {
    query: {
        filtered: {
            filter: {
                term: { "name.raw": category }
            }
        }
    }
};

$.ajax({
    url: "http://192.168.0.240:9200/dropdowns/category/_search",
    type: 'GET',
    dataType: 'json',
    success: function(data) {
        console.log('Success');
        $(data.hits.hits).each(function(index, hit) {
            console.log(hit._source.items);
        });
    },
    error: function(jqXHR, textStatus, errorThrown) {
        console.log(textStatus);
        console.log(errorThrown);
    },
    data: query
});
您应该能够在Javascript控制台中调试查询问题,并看到成功的输出。以下是关于如何在不同浏览器中查看JS控制台的一些说明:


编辑:这些说明似乎是专门针对Windows的。我知道在Mac上,Command+Option+j会打开ChromeJS控制台。我确信如果您的浏览器/操作系统未在此处介绍,您可以在谷歌上找到正确的快捷方式。

使用以下代码:

var query = {
    query: {
        filtered: {
            filter: {
                term: { "name.raw": category }
            }
        }
    }
};

$.ajax({
    url: "http://192.168.0.240:9200/dropdowns/category/_search",
    type: 'GET',
    dataType: 'json',
    success: function(data) {
        console.log('Success');
        $(data.hits.hits).each(function(index, hit) {
            console.log(hit._source.items);
        });
    },
    error: function(jqXHR, textStatus, errorThrown) {
        console.log(textStatus);
        console.log(errorThrown);
    },
    data: query
});
您应该能够在Javascript控制台中调试查询问题,并看到成功的输出。以下是关于如何在不同浏览器中查看JS控制台的一些说明:


编辑:这些说明似乎是专门针对Windows的。我知道在Mac上,Command+Option+j会打开ChromeJS控制台。如果这里没有介绍你的浏览器/操作系统,我相信你可以在谷歌上找到正确的快捷方式。

在乔纳森·勒纳的帮助下,我发现我的查询存在的问题是必须将其字符串化。所以,我只是把它改成

data : JSON.stringify(query)

在乔纳森·勒纳(Jonathon Lerner)的帮助下,我发现我的查询的问题在于它必须被严格化。所以,我只是把它改成

data : JSON.stringify(query)
某些语言(特别是Javascript)的HTTP库不允许GET请求具有请求体

见此:

所以我认为在这里使用POST方法是正确的,您只是忘记了将请求主体字符串化

某些语言(特别是Javascript)的HTTP库不允许GET请求具有请求体

见此:


因此,我认为在这里使用POST方法是正确的,您只是忘记了将请求正文字符串化。

您应该能够使用GET方法在URL中发送查询,语法如下:

var query = '{"query":{"filtered":{"filter:{"term":{"name.raw": category}}}}}';

$.ajax({
        url: `http://192.168.0.240:9200/dropdowns/category/_search?
              source_content_type=application/json&source=${query}`,
        success: function(data) {
            console.log(data);
        }
    });

您应该能够使用GET方法在URL中发送查询,语法如下:

var query = '{"query":{"filtered":{"filter:{"term":{"name.raw": category}}}}}';

$.ajax({
        url: `http://192.168.0.240:9200/dropdowns/category/_search?
              source_content_type=application/json&source=${query}`,
        success: function(data) {
            console.log(data);
        }
    });

您的ajax请求类型不应该是
get
?我认为您的ajax调用没有任何问题。如果查询不正确,Elasticsearch将返回400。您应该查看错误函数中的
数据
,以了解查询问题。这可能与不正确的映射有关,因为您正在尝试进行嵌套搜索。而且,
data.hits.hits
只会是成功的一件事。错误永远不会返回命中率。对,那么查询有什么问题吗?从我所看到的来看,本质上没有什么问题。您需要在
error
回调中将错误消息记录到控制台,以查看弹性搜索服务器告诉您的信息。如果您想轻松地测试您的查询,请使用
curl
或Elasticsearch Sense抱歉,我是新手,您能告诉我怎么做吗?如何将错误消息记录到控制台?您的ajax请求类型不应该是
get
?我认为您的ajax调用没有任何问题。如果查询不正确,Elasticsearch将返回400。您应该查看错误函数中的
数据
,以了解查询问题。这可能与不正确的映射有关,因为您正在尝试进行嵌套搜索。而且,
data.hits.hits
只会是成功的一件事。错误永远不会返回命中率。对,那么查询有什么问题吗?从我所看到的来看,本质上没有什么问题。您需要在
error
回调中将错误消息记录到控制台,以查看弹性搜索服务器告诉您的信息。如果您想轻松地测试您的查询,请使用
curl
或Elasticsearch Sense抱歉,我是新手,您能告诉我怎么做吗?如何将错误消息记录到控制台?好的,因此运行GET时会获得成功,但GET会返回所有类别,而不仅仅是我要查找的类别。当我发布时,它失败了,但是控制台没有告诉我为什么失败;它只是说“错误请求”,控制台应该在失败时记录两个不同的事情。至于为什么在使用GET时它返回的内容比您想要的要多…我必须查看您的映射、一些示例文档等,才能真正调试elasticsearch查询。好的,所以我在运行GET时获得了成功,但GET返回所有类别,而不仅仅是我要查找的类别。当我发布时,它失败了,但是控制台没有告诉我为什么失败;它只是说“错误请求”,控制台应该在失败时记录两个不同的事情。至于为什么使用GET时返回的结果比您想要的要多……我必须查看您的映射、一些示例文档等,才能真正调试elasticsearch查询。