【问题标题】:Using advanced search operators in sending query to saerch engine using restful API使用高级搜索运算符使用 RESTful API 向搜索引擎发送查询
【发布时间】:2019-12-07 12:28:57
【问题描述】:

我对使用 REST API 完全陌生。但是,这些天,我需要使用ChatNoir Search engine 中提供的其余 API 来发送一些关键字并检索相关文档。我已经编写了发送查询和接收结果的代码。当查询像“hello world”这样简单时,它会返回一些结果,但是当查询词的数量增加时,它会返回null。我认为搜索引擎将查询视为完全匹配。所以,也许我应该使用高级搜索运算符。在ChatNoir documents 中指出,我们可以像其他搜索引擎一样使用高级搜索运算符。但是,我不知道如何在 JAVA 中使用它。我在查询词之间使用了“And”运算符并将查询作为字符串发送,但它不起作用。 我的源代码是:

    JSONObject json = new JSONObject();
    json.put("apikey", "$MyAPIKey");
    List<String> datasource=new ArrayList<>();
    datasource.add("cw09");
    json.put("index", datasource);
    json.put("pretty", true);
    json.put("query","hello world");*****

    HttpClient httpClient = new DefaultHttpClient();
    try {
        HttpPost request = new HttpPost("https://www.chatnoir.eu/api/v1/_search");
        StringEntity params = new StringEntity(json.toString());
        request.addHeader("content-type", "application/json");
        request.setEntity(params);
        HttpResponse response= httpClient.execute(request);

        HttpEntity entity = response.getEntity();
        String responseString = EntityUtils.toString(entity, "UTF-8");

        JSONObject jsonObject = new JSONObject(responseString);
        JSONArray jsonArray=null;
        if (jsonObject!=null)
            jsonArray= jsonObject.getJSONArray("results");
            for(int x = 0; x < jsonArray.length(); x++){
            String uuid=jsonArray.getJSONObject(x).getString("uuid");
            String score=String.valueOf(jsonArray.getJSONObject(x).getDouble("score"));
            System.out.print("uuid="+uuid+"\t"+"score="+score);
        }
    } catch (Exception e) {
        System.out.println(e);
    }

因此,问题是如何将查询词发送到搜索引擎以不被视为完全匹配(可能使用高级搜索运算符)。例如,查询词为 term1、term2、term3、term4、term5、term6。

任何帮助将不胜感激。

【问题讨论】:

  • 您使用的是哪个弹性搜索查询?你能提供搜索JSON吗?
  • 感谢您的考虑。我不知道你的意思是“elasticsearch”?搜索引擎是 ChatNoir,我正在使用该引擎中提供的搜索 API。请查收:chatnoir.eu/doc/api
  • 那么你不应该在你的问题中使用elasticsearch标签:)

标签: java rest elasticsearch google-api http-post


【解决方案1】:

搜索引擎不会将您的查询视为完全匹配短语,但默认术语运算符是 AND,这意味着所有单个术语都必须出现在文档中。精确匹配短语会得到奖励并出现在单个术语匹配之前,但不是必需的。因此,随着您的查询变得更长,预计您将获得更少的结果。

如果要搜索仅包含查询部分的文档,则必须将其表述为 OR 查询。例如,"hello world" OR "search engine" 将匹配包含 hello worldsearch engine 或两者的文档。不过,请确实期望结果会非常脱节。有时一个词更常见并且匹配更多的文档,因此您将很难找到同时包含另一个词的结果。

【讨论】:

    【解决方案2】:

    ChatNoir documantation 中提到可以使用不同的 Web 运算符来附加多个关键字。

    简单模块与我们的最终用户网络搜索相同的模块 服务用途。这意味着您可以使用 Web 界面(AND、OR、-、“...”、站点:... 等)也在您的 API 查询中 字符串。

    【讨论】:

    • 感谢您的回答。问题是我不知道如何使用这些 Web 操作符来使用 rest API 发送查询。您能否指导我在上面的源代码中附加什么才能发送 multplei 关键字?再次感谢。
    • 很遗憾,我没有 API 密钥可以试一试,但我可以从描述中猜到您可以将不同术语/关键字之间的运算符附加到查询字符串中。
    猜你喜欢
    • 1970-01-01
    • 2020-10-22
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多