按特定ID

时间:2016-05-05 04:39:20

标签: solr solrj

我有一个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

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");