SolrJ查询Solr数据

2019-03-27 01:22|来源: 网路

1、首先,我比较懒。我把 apache-solr-3.6.1/dist 目录下所有的包导入到了工程中,除了war包。

2、下面来看看代码,里面都有注释,其它就不多说了

import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;

public class SolrJUtils {

	private static final String baseURL = "http://192.168.241.128:8080/solr";// solr服务器url
	private static SolrServer solrServer = new HttpSolrServer(baseURL);

	public static void search() {
		SolrQuery params = new SolrQuery();
		// 查询关键词,*:*代表所有属性、所有值,即所有index
		// params.set("q", "*:*");
		params.set("q", "nickname:chm*");// 查询nickname是已chm开头的数据

		// 分页,start=0就是从0开始,,rows=5当前返回5条记录,第二页就是变化start这个值为5就可以了。
		params.set("start", 0);
		params.set("rows", 5);

		// 按nickname排序,asc升序 desc降序
		params.set("sort", "nickname asc");

		try {
			QueryResponse rsp = solrServer.query(params);
			SolrDocumentList docs = rsp.getResults();
			System.out.println("文档个数:" + docs.getNumFound());
			System.out.println("查询时间:" + rsp.getQTime());
			for (SolrDocument doc : docs) {
				String name = (String) doc.getFieldValue("nickname");
				System.out.println(name);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	public static void main(String[] args) {
		SolrJUtils.search();//实际应用过程中可以根据自身需要传参
	}
}
好了,一般开发都是用查询功能的,索引的更新基本上都是使用 crond。
转自:http://my.oschina.net/eatsuger/blog/83244

相关问答

更多
  • Using BasicAuth with SolrJ In SolrJ, the basic authentication credentials need to be set for each request as in this example: SolrRequest req ;//create a new request object req.setBasicAuthCredentials(userName, password); solrClient.request(req); Query exa ...
  • 在做了一些测试后我解决了问题,我不得不使用HttpSolrServer而不是EmbeddedSolrServer,似乎EmbeddedSolrServer以某种方式使用他们自己的数据,所以我管理着2个不同的数据。 使用HttpSolrServer是解决方案。 After doing some test i solved the problem, i had to use HttpSolrServer, instead of EmbeddedSolrServer, it seems EmbeddedSolrS ...
  • 使用Java 6,您可以使用Xpath从xml文件中获取所需的内容。 然后,从您从xml中提取的内容填充SolrInputDocument 。 当该文档包含您需要的所有内容时,请使用SolrServer的添加方法将其提交给Solr。 With Java 6, you can use Xpath to fetch what you need from your xml file. Then, you populate a SolrInputDocument from what you extracted fr ...
  • 在新版本中有一个SuggesterResponse: https://lucene.apache.org/solr/5_3_1/solr-solrj/org/apache/solr/client/solrj/response/SuggesterResponse.html In new versions have a SuggesterResponse: https://lucene.apache.org/solr/5_3_1/solr-solrj/org/apache/solr/client/solrj/r ...
  • solrj是与solr交互的java客户端api。 此外,solrj已经改变了基于solrj版本与solr交互的方式。 因此,请验证您正在使用的solr版本的文档。 通常,下面的代码片段应该负责获取solrj的所有依赖项。 solr-solrj org.apache.solr 4.10.3
  • 您可以在SolrQuery类上使用addFilterQuery()方法 。 只需按原样传递过滤器查询(“ x:[10 TO 100] AND y:[20 TO 300] ”) You can use the addFilterQuery() method on the SolrQuery class. Just pass the filter query as is ("x:[10 TO 100] AND y:[20 TO 300]")
  • 谢谢Perikli,但它已经整理好了。 代码如下: SolrServer solrServer = new HttpSolrServer("http://localhost:8983/solr"); QueryResponse qResponse = solrServer.query(queryForFecthing); 实际上在创建QueryResponse对象时得到异常,即qResponse ,我认为这是因为我作为参数传递的查询(即上面是' queryForFecthing ')。 但这是错误的假设 ...
  • 在服务器上执行查询之前,客户端不会知道你在服务器端设置了什么,对吧? 所以他们全都是空的并不奇怪。 要实现分页,您需要客户端的两个参数 - 页码和每页的项目数量。 一旦你得到了这两个,你可以在客户端构建你的SolrQuery,如下所示: SolrQuery query = new SolrQuery(searchTerm); query.setStart((pageNum - 1) * numItemsPerPage); query.setRows(numItemsPerPage); // execute ...
  • 尝试使用SolrQuery对象而不是ModifiableSolrParams。 也许它会有所帮助。 如果您因任何原因无法使用SolrQuery,请尝试使用静态名称,例如“CommonParams.Q”而不是像“?q”这样的硬编码名称。 EDITED 我测试了您的问题,我认为您的Application Server缺少配置。 你在使用JBoss 7.1吗? 您需要在.standalone.sh或standalone.bat中添加一行,告诉solr在哪里。 例如,在Jboss 7.1中,在默认配置中,您必须向s ...
  • 在Solr中读取嵌套查询后看起来您的问题与传递已编码的值有关,因为SolrJ将为您编码它们,并且您可能在问题中使用您的方法进行双重编码。 这是一个没有编码应该工作的修改版本: SolrQuery query = new SolrQuery(); String nested = ""; nested += "category_name:"; nested += categoryNames.get(0); nested += " AND _query_:\"{!dismax qf=category_nam ...