按特定 ID 在 solrj 中搜索

search in solrj by particular id

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

但它没有找到任何文件..有人可以帮我用转义符写上面一行或者建议一些其他的方法来实现它。

仅供参考,我在 Whosebug 上找到了 1 link,但这对我没有帮助,我现在没有那个 link 可以将它粘贴到这里。

Solr 版本: 4.10.3

试试这个,将 id 值赋给变量并使用该变量。 solr 会将您的查询标记化,因此您应该考虑在此处使用 Phrase 查询。喜欢

docID="\"<382-84623-87309-184579-JHSAG@gmail.com>2016-04-22T21:12:30Z\""

query.setQuery("id:"+docID);

如何在您的 solr 架构中定义字段 ID?

如果您的 id 是字符串字段,则使用双引号将您的搜索关键字括起来, 如果你的 id 是文本字段,那么在你的关键字中使用 lucene 的转义符

QueryParser.escape("")

我认为这是最清晰的解决方案:

query.setQuery("id:"+QueryParser.escape("<382-84623-87309-184579-JHSAG@gmail.com>2016-04-22T21:12:30Z");