0

我正在尝试使用 Java 包装器执行 retrieveAndRank 查询。我关注 Retrieve and Rank API 的在线 javadocs。SearchAndRank 的示例是:

https://www.ibm.com/watson/developercloud/retrieve-and-rank/api/v1/#query_ranker

RetrieveAndRank service = new RetrieveAndRank();
service.setUsernameAndPassword("{username}","{password}");
HttpSolrClient solrClient = new HttpSolrClient;
solrClient = getSolrClient(service.getSolrUrl("scfaaf8903_02c1_4297_84c6_76b79537d849"), "{username}","{password}");
SolrQuery query = new SolrQuery("what is the basic mechanism of the transonic aileron buzz");
QueryResponse response = solrClient.query("example_collection", query);
Ranking ranking = service.rank("B2E325-rank-67", response);
System.out.println(ranking);

但是 RetrieveAndRank 类没有这样的 rank(String rankerId, QueryResponse response) 方法。只有一个获取文件或 InputStream 作为参数(浏览 IBM 的源代码,我看到它需要 CSV 内容而不是 java QueryResponse)。

我应该如何将 QueryResponse 传递给 rank 方法?

我正在使用 solr-solrj-5.5.2.jar 和 java-sdk-3.2.0-jar-with-dependencies.jar 库

4

1 回答 1

1

您需要使用/fcselect查询处理程序并将其ranker_id作为参数发送。

下面的代码假设您有一个包含文档的 Solr 集合,并且您已经训练了一个排名器,否则请遵循本教程

 RetrieveAndRank service = new RetrieveAndRank();
 service.setUsernameAndPassword(USERNAME, PASSWORD);

 // create the solr client
 String solrUrl = service.getSolrUrl(SOLR_CLUSTER_ID);
 HttpClient client = createHttpClient(solrUrl, USERNAME, PASSWORD);
 HttpSolrClient solrClient = new HttpSolrClient(solrUrl, client);

 // build the query
 SolrQuery query = new SolrQuery("*:*");
 query.setRequestHandler("/fcselect");
 query.set("ranker_id", RANKER_ID);

 // execute the query
 QueryResponse response = solrClient.query(SOLR_COLLECTION_NAME, query);
 System.out.println("Found " + response.getResults().size() + " documents!");
 System.out.println(response);

确保更新 RetrieveAndRank(USERNAMEPASSWORD)、SOLR_CLUSTER_IDSOLR_COLLECTION_NAME的服务凭证RANKER_ID。的代码createHttpClient()可以在这里找到。

于 2016-08-06T22:38:39.523 回答