【问题标题】:Elasticsearch URI based search query without source fields没有源字段的基于 Elasticsearch URI 的搜索查询
【发布时间】:2016-08-09 03:39:03
【问题描述】:

我正在尝试执行一个基于 URI 的查询,如下所示。但我没有看到我传递的搜索参数有任何影响。而且我想禁用_source = false。你能帮我查询一下吗?我正在使用 java 使用 Java.net 包执行相同的操作。无论我通过什么搜索参数,此查询都会返回所有内容。

URI:“http://localhost:9200/twitter/twitter/_search?updatedBy=XX&node=YY

Java 代码:

   String charset = "UTF-8"; 
            String updatedBy = "XX";
            String node = "YY";

    String query = String.format("updatedBy:%s&nodeId:%s",
            URLEncoder.encode(updatedBy, charset),
            URLEncoder.encode(nodeId, charset));
    System.out.println(searchEsUrl + "?q=" + query);

    URLConnection connection = new URL(searchEsUrl + "?q=" + query).openConnection();
    connection.setRequestProperty("Accept-Charset", charset);

【问题讨论】:

    标签: java elasticsearch


    【解决方案1】:

    试试这个

    String query = String.format("updatedBy:%s+AND+nodeId:%s",
            URLEncoder.encode(updatedBy, charset),
            URLEncoder.encode(nodeId, charset));
    URLConnection connection = new URL(searchEsUrl + "?_source=false&q=" + query).openConnection();
    

    问题是q= 参数中发送的任何内容都需要遵循查询字符串查询syntax rules,并且使用AND 运算符而不是& 对两个约束进行与运算,如下所示:updatedBy:XX AND nodeId:YY

    你要构造的URI是这样的:

    "http://localhost:9200/twitter/twitter/_search?q=updatedBy:XX AND nodeId:YY"
    

    【讨论】:

    • 感谢您的快速回复。这工作得很好。正如你提到的,我使用的是“&”而不是 AND。
    • 现在可以正常使用了。我什至可以禁用源以及传递大小参数。我已经接受它作为答案。
    猜你喜欢
    • 1970-01-01
    • 2018-12-28
    • 2015-03-08
    • 1970-01-01
    • 2018-11-03
    • 2023-01-17
    • 2013-08-24
    • 2018-08-18
    • 1970-01-01
    相关资源
    最近更新 更多