【发布时间】: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