我有一个Id的列表,我想根据这些ID搜索文档,Id的格式是这样的 -
id:<382-84623-87309-184579-JHSAG@gmail.com>2016-04-22T21:12:30Z
我写了一段代码 -
SolrQuery query = new SolrQuery();
query.setQuery("id:<382-84623-87309-184579-JHSAG@gmail.com>2016-04-22T21:12:30Z");
query.setFields("id","from","subject");
QueryResponse response = server.query(query); // server is a CloudSolrServer object
SolrDocumentList results = response.getResults();
for(i=0;i<results.size();i++) {
system.out.println(results.get(i);
}
但我收到错误
org.apache.solr.common.SolrException: org.apache.solr.search.SyntaxError: Cannot parse 'name:': Encountered "<EOF>" at line 1, column 5.
Was expecting one of:
<BAREOPER> ...
"(" ...
"*" ...
<QUOTED> ...
<TERM> ...
<PREFIXTERM> ...
<WILDTERM> ...
<REGEXPTERM> ...
"[" ...
"{" ...
<LPARAMS> ...
<NUMBER> ...
我尝试在此行的Id值中添加转义字符
query.setQuery("id:<382-84623-87309-184579-JHSAG@gmail.com>2016-04-22T21:12:30Z");
但它没有找到任何文件..有人可以帮我用转义字符写上面的行或建议其他方法来实现它。
仅供参考,我在stackoverflow上找到1个链接,但这对我没有帮助,我现在没有链接将其粘贴到此处。
Solr版本:4.10.3
答案 0 :(得分:2)
如何在solr架构中定义字段ID?
如果您的ID是字符串字段,那么请使用双引号环绕搜索关键字, 如果您的ID是文本字段,请在关键字
中使用lucene的转义符QueryParser.escape("")
答案 1 :(得分:1)
试试这个,将id值赋给变量并使用该变量。 solr将对您的查询进行标记,因此您应该考虑在此处使用短语查询。喜欢
private void load(OAuth oauth) {
if (oauth != null) {
System.out.println("file :- "+file);
UploadPhotoTask taskUpload = new UploadPhotoTask(this, new File(myDir,path));
System.out.println("taskUpload :- "+taskUpload);
taskUpload.setOnUploadDone(new UploadPhotoTask.onUploadDone() {
@Override
public void onComplete() {
finish();
}
});
taskUpload.execute(oauth);
}
}
docID="\"<382-84623-87309-184579-JHSAG@gmail.com>2016-04-22T21:12:30Z\""
答案 2 :(得分:0)
我认为这是最明智的解决方案:
query.setQuery("id:"+QueryParser.escape("<382-84623-87309-184579-JHSAG@gmail.com>2016-04-22T21:12:30Z");