Solr的查询语法

admin 4861 2025-10-17 04:33:26

查询索引

solr的查询语法

1. q - 查询关键字,必须的,如果查询所有使用*😗。

请求的q是字符串

2. fq - (filter query)过虑查询,作用:在q查询符合结果中同时是fq查询符合的,例如::

请求fq是一个数组(多个值)

过滤查询价格从1到20的记录。

也可以在“q”查询条件中使用product_price:[1 TO 20],如下:

也可以使用“*”表示无限,例如:

20以上:product_price:[20 TO *]

20以下:product_price:[* TO 20]

3. sort - 排序,格式:sort=+[,+]… 。示例:

按价格降序

4. start - 分页显示使用,开始记录下标,从0开始

5. rows - 指定返回结果最多有多少条记录,配合start来实现分页。

实际开发时,知道当前页码和每页显示的个数最后求出开始下标。

6. fl - 指定返回那些字段内容,用逗号或空格分隔多个。

显示商品图片、商品名称、商品价格

7. df-指定一个搜索Field

也可以在SolrCore目录 中conf/solrconfig.xml文件中指定默认搜索Field,指定后就可以直接在“q”查询条件中输入关键字。

8. wt - (writer type)指定输出格式,可以有 xml, json, php, phps, 后面 solr 1.3增加的,要用通知我们,因为默认没有打开。

9. hl 是否高亮 ,设置高亮Field,设置格式前缀和后缀。

简单查询

@Test

public void queryIndex() throws Exception {

// 创建HttpSolrServer对象,通过它和Solr服务器建立连接。

// 参数:solr服务器的访问地址

HttpSolrServer server = new HttpSolrServer(

"http://localhost:8080/solr/");

// 创建SolrQuery对象

SolrQuery query = new SolrQuery();

// 设置查询条件,名称“q”是固定的且必须 的

query.set("q", "id:2");

// 调用server的查询方法,查询索引库

QueryResponse response = server.query(query);

// 查询结果

SolrDocumentList results = response.getResults();

// 查询结果总数

long cnt = results.getNumFound();

System.out.println("查询结果总数:" + cnt);

for (SolrDocument solrDocument : results) {

System.out.println(solrDocument.get("id"));

System.out.println(solrDocument.get("product\_name"));

System.out.println(solrDocument.get("product\_price"));

System.out.println(solrDocument.get("product\_catalog\_name"));

System.out.println(solrDocument.get("product\_picture"));

}

}

复杂查询

复杂查询中包括高亮的处理

@Test

public void queryIndex2() throws Exception {

// 创建HttpSolrServer对象,通过它和Solr服务器建立连接。

// 参数:solr服务器的访问地址

HttpSolrServer server = new HttpSolrServer("http://localhost:8080/solr/");

// 创建SolrQuery对象

SolrQuery query = new SolrQuery();

// 设置查询条件

query.setQuery("钻石");

// 设置过滤条件

query.setFilterQueries("product\_catalog\_name:幽默杂货");

// 设置排序

query.setSort("product\_price", ORDER.desc);

// 设置分页信息

query.setStart(0);

query.setRows(10);

// 设置显得的域的列表

query.setFields("id", "product\_name", "product\_price",

"product\_catalog\_name", "product\_picture");

// 设置默认搜索域

query.set("df", "product\_name");

// 设置高亮

query.setHighlight(true);

query.addHighlightField("product\_name");

query.setHighlightSimplePre("");

query.setHighlightSimplePost("");

// 调用server的查询方法,查询索引库

QueryResponse response = server.query(query);

// 查询结果

SolrDocumentList results = response.getResults();

// 查询结果总数

long cnt = results.getNumFound();

System.out.println("查询结果总数:" + cnt);

for (SolrDocument solrDocument : results) {

System.out.println(solrDocument.get("id"));

String productName = (String) solrDocument.get("product\_name");

//获取高亮列表

Map>> highlighting = response

.getHighlighting();

//获得本文档的高亮信息

List list = highlighting.get(solrDocument.get("id")).get(

"product\_name");

//如果有高亮,则把商品名称赋值为有高亮的那个名称

if (list != null) {

productName = list.get(0);

}

System.out.println(productName);

System.out.println(solrDocument.get("product\_price"));

System.out.println(solrDocument.get("product\_catalog\_name"));

System.out.println(solrDocument.get("product\_picture"));

}

}

原文链接 https://www.hanyuanhun.cn | https://node.hanyuanhun.cn

上一篇
下一篇
相关文章