solr_day04_solr复杂查询

solr复杂查询

q:查询的关键字

必须的

请求的q是字符串,如果查询所有使用*:*

fq:(filter query)过滤查询

作用

  • 查询在q查询结果的基础上同时符合fq查询条件的数据
  • 请求fq是一个数组(多个值)

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

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

20以上:product_price:[20 TO *]

20以下:product_price:[* TO 20]

sort:排序

desc代表降序,asc代表升序

start

开始的下标

rows

每页显示的记录数

fl

(Field List)指定返回那些字段内容,用逗号或空格分隔多个。

显示商品id、商品名称、商品分类名称

df

默认搜索的域

wt

(writer type)指定输出格式,可以有 xml, json, php, phps

hl

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

solrj的复杂查询

package com.itheima.test;

import java.util.List;
import java.util.Map;

import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrQuery.ORDER;
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;
import org.junit.Test;

public class SolrJGaojiTest {

	@Test
	public void testName() throws Exception {
		// 1.创建连接
		SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr");
		// 2.创建查询条件对象
		SolrQuery query = new SolrQuery();
		// 3.设置条件
		// 设置查询条件
		query.setQuery("台灯");
		// 设置过滤条件
		query.setFilterQueries("product_catalog_name:雅致灯饰");
		query.setFilterQueries("product_price:[20 TO 40]");
		// 设置排序
		query.setSort("product_price", ORDER.desc);
		// 设置分页
		query.setStart(0);// 开始下标
		query.setRows(5);// 每页显示的条数
		// 设置返回的数据
		query.setFields("id,product_name,product_price,product_catalog_name");
		// 设置默认域
		query.set("df", "product_keywords");
		// 设置高亮的域
		query.addHighlightField("product_name");
		// 设置高亮的前缀
		query.setHighlightSimplePre("<span style=\"color:red\">");
		// 设置高亮的后缀
		query.setHighlightSimplePost("</span>");
		// 4.执行查询,返回响应
		QueryResponse queryResponse = solrServer.query(query);

		// 5.根据这个响应获取结果集(文档集合)
		SolrDocumentList solrDocumentList = queryResponse.getResults();
		System.out.println("查询到的总数是:" + solrDocumentList.getNumFound());
		// 6.遍历文档
		for (SolrDocument doc : solrDocumentList) {
			String productName = "";
			
			// 获取高亮
			Map<String, Map<String, List<String>>> highlighting = queryResponse.getHighlighting();
			// 获取高亮的数据
			List<String> list = highlighting.get(doc.get("id")).get("product_name");
			if (list != null) {
				productName = list.get(0);
			} else {
				productName = String.valueOf(doc.get("product_name"));
			}

			// 7.打印数据
			System.out.println("id:" + doc.get("id"));
			System.out.println("商品名称:" + productName);
			System.out.println("商品价格:" + doc.get("product_price"));
			System.out.println("商品描述:" + doc.get("product_catalog_name"));
		}
	}

}

案例

需求

使用Solr实现电商网站中商品信息搜索功能,可以根据关键字搜索商品信息,根据商品分类、价格过滤搜索结果,也可以根据价格进行排序,实现分页

功能分析

高级搜索

  • 条件回显
  • 关键字查询

过滤查询

  • 商品类别
  • 商品价格

排序

价格排序

商品列表

  • 商品信息
    • 图片
    • 名称
    • 价格
    • 高亮
  • 总记录数
  • 分页

架构分析

springMVC框架

dao层

  • @reposity
  • 连接solr服务器

service层

  • @Service
  • 处理业务

web层

  • 扫描包注解
  • 配置三大组件

web.xml

  • 前端控制器

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值