Java 特定字段上的solrj搜索

Java 特定字段上的solrj搜索,java,solr,solrj,Java,Solr,Solrj,我正在使用solrj从solr安装执行查询搜索 这就是我所拥有的: public List<Details> search(String query, int first, int rows) { List<Details> cds = new ArrayList<Details>(); try { SolrQuery q = new SolrQuery(); q.set("q", "name:" + query); /

我正在使用solrj从solr安装执行查询搜索

这就是我所拥有的:

public List<Details> search(String query, int first, int rows) {
    List<Details> cds = new ArrayList<Details>();
    try {
      SolrQuery q = new SolrQuery();
      q.set("q", "name:" + query); //this throws an error on the solr side!
      q.setFields("id");
      q.setRows(rows);
      q.setStart(first);
      QueryResponse r = server.query(q);
      final SolrDocumentList docList = r.getResults();
      for (SolrDocument doc : docList) {
        String id_ = doc.getFieldValue("id").toString();
        Long id = Long.parseLong(id_);
        Details cd = detailsFacade.find(id);
        cds.add(cd);
      }
    } catch (SolrServerException ex) {
      Logger.getLogger(SolrIndexer.class.getName()).log(Level.SEVERE, null, ex);
    }
    return cds;
  }

  public int count(String query) {
    try {
      SolrQuery q = new SolrQuery();
      q.set("q", "name:" + query); //this throws an error on the solr side
      q.setRows(0);  // don't actually request any data
      return (int) server.query(q).getResults().getNumFound();
    } catch (SolrServerException ex) {
      Logger.getLogger(SolrIndexer.class.getName()).log(Level.SEVERE, null, ex);
    }
    return 0;
  }
公共列表搜索(字符串查询,int-first,int行){
List cds=new ArrayList();
试一试{
SolrQuery q=新的SolrQuery();
q、 set(“q”,“name:+query);//这会在solr端抛出一个错误!
q、 设置字段(“id”);
q、 设置行(行);
q、 设置开始(第一);
QueryResponse r=server.query(q);
最终解决方案文档列表docList=r.getResults();
对于(解决方案文档:文档列表){
字符串id=doc.getFieldValue(“id”).toString();
Long id=Long.parseLong(id_1;);
Details cd=detailsFacade.find(id);
添加(cd);
}
}捕获(SolrServerException ex){
Logger.getLogger(SolrIndexer.class.getName()).log(Level.SEVERE,null,ex);
}
归还光盘;
}
公共整数计数(字符串查询){
试一试{
SolrQuery q=新的SolrQuery();
q、 set(“q”,“name:”+query);//这会在solr端抛出一个错误
q、 setRows(0);//实际上不请求任何数据
return(int)server.query(q.getResults().getNumFound();
}捕获(SolrServerException ex){
Logger.getLogger(SolrIndexer.class.getName()).log(Level.SEVERE,null,ex);
}
返回0;
}
我只想在name字段上进行查询。(我有几个字段包含索引文档的数据)

solr端的错误:

1126326 [qtp1645986986-17] ERROR org.apache.solr.core.SolrCore  – 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> ...

    at org.apache.solr.handler.component.QueryComponent.prepare(QueryComponent.java:171)
    at org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:187)
    at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:135)
    at org.apache.solr.core.SolrCore.execute(SolrCore.java:1859)
    at org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:721)
    at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:417)
    at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:201)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1419)
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:455)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:557)
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1075)
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:384)
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1009)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
    at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:255)
    at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:154)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
    at org.eclipse.jetty.server.Server.handle(Server.java:368)
    at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:489)
    at org.eclipse.jetty.server.BlockingHttpConnection.handleRequest(BlockingHttpConnection.java:53)
    at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:942)
    at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:1004)
    at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:640)
    at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)
    at org.eclipse.jetty.server.BlockingHttpConnection.handle(BlockingHttpConnection.java:72)
    at org.eclipse.jetty.server.bio.SocketConnector$ConnectorEndPoint.run(SocketConnector.java:264)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
    at java.lang.Thread.run(Thread.java:724)
Caused by: 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> ...

    at org.apache.solr.parser.SolrQueryParserBase.parse(SolrQueryParserBase.java:157)
    at org.apache.solr.search.LuceneQParser.parse(LuceneQParser.java:50)
    at org.apache.solr.search.QParser.getQuery(QParser.java:142)
    at org.apache.solr.handler.component.QueryComponent.prepare(QueryComponent.java:142)
    ... 31 more
Caused by: org.apache.solr.parser.ParseException: Encountered "<EOF>" at line 1, column 5.
Was expecting one of:
    <BAREOPER> ...
    "(" ...
    "*" ...
    <QUOTED> ...
    <TERM> ...
    <PREFIXTERM> ...
    <WILDTERM> ...
    <REGEXPTERM> ...
    "[" ...
    "{" ...
    <LPARAMS> ...
    <NUMBER> ...

    at org.apache.solr.parser.QueryParser.generateParseException(QueryParser.java:651)
    at org.apache.solr.parser.QueryParser.jj_consume_token(QueryParser.java:533)
    at org.apache.solr.parser.QueryParser.Clause(QueryParser.java:217)
    at org.apache.solr.parser.QueryParser.Query(QueryParser.java:108)
    at org.apache.solr.parser.QueryParser.TopLevelQuery(QueryParser.java:97)
    at org.apache.solr.parser.SolrQueryParserBase.parse(SolrQueryParserBase.java:153)
    ... 34 more
1126326[qtp1645986986-17]错误org.apache.solr.core.SolrCore–org.apache.solr.common.SolrException:org.apache.solr.search.SyntaxError:无法分析第1行第5列的“名称:”:遇到“”。
我期待的是:
...
"(" ...
"*" ...
...
...
...
...
...
"[" ...
"{" ...
...
...
位于org.apache.solr.handler.component.QueryComponent.prepare(QueryComponent.java:171)
位于org.apache.solr.handler.component.SearchHandler.HandlerRequestBody(SearchHandler.java:187)
位于org.apache.solr.handler.RequestHandlerBase.HandlerRequest(RequestHandlerBase.java:135)
位于org.apache.solr.core.SolrCore.execute(SolrCore.java:1859)
位于org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:721)
位于org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:417)
位于org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:201)
位于org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1419)
位于org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:455)
位于org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)
位于org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:557)
位于org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)
位于org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1075)
位于org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:384)
位于org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
位于org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1009)
位于org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
位于org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:255)
位于org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:154)
位于org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
位于org.eclipse.jetty.server.server.handle(server.java:368)
位于org.eclipse.jetty.server.AbstractHttpConnection.HandlerRequest(AbstractHttpConnection.java:489)
位于org.eclipse.jetty.server.blockingttpconnection.handleRequest(blockingttpconnection.java:53)
位于org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:942)
位于org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:1004)
http.HttpParser.parseNext(HttpParser.java:640)
http.HttpParser.parseAvailable(HttpParser.java:235)
位于org.eclipse.jetty.server.blockingttpconnection.handle(blockingttpconnection.java:72)
位于org.eclipse.jetty.server.bio.SocketConnector$ConnectorEndPoint.run(SocketConnector.java:264)
位于org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
位于org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
运行(Thread.java:724)
原因:org.apache.solr.search.SyntaxError:无法分析第1行第5列的“名称:”:遇到“”。
我期待的是:
...
"(" ...
"*" ...
...
...
...
...
...
"[" ...
"{" ...
...
...
位于org.apache.solr.parser.SolrQueryParserBase.parse(SolrQueryParserBase.java:157)
位于org.apache.solr.search.LuceneQParser.parse(LuceneQParser.java:50)
位于org.apache.solr.search.QParser.getQuery(QParser.java:142)
位于org.apache.solr.handler.component.QueryComponent.prepare(QueryComponent.java:142)
…还有31个
原因:org.apache.solr.parser.ParseException:在第1行第5列遇到“”。
我期待的是:
...
"(" ...
"*" ...
...
...
...
...
...
"[" ...
"{" ...
...
...
位于org.apache.solr.parser.QueryParser.generateParseException(QueryParser.java:651)
位于org.apache.solr.parser.QueryParser.jj_consume_令牌(QueryParser.java:533)
位于org.apache.solr.parser.QueryParser.子句(QueryParser.java:217)
位于org.apache.solr.parser.QueryParser.Query(QueryParser.java:108)
位于org.apache.solr.parser.QueryParser.TopLevelQuery(QueryParser.java:97)
位于org.apache.solr.parser.SolrQueryParserBase.parse(SolrQueryParserBase.java:153)
…还有34个
我怎样才能做到这一点

感谢您可以使用,如下所示:

MultiMapSolrParams solrParams = SolrRequestParsers.parseQueryString("q=name:abc");
QueryResponse r = server.query(solrParams, SolrRequest.METHOD.POST);
呵呵
name:"Jackson"