目录
1. 全查询
@Test
public void queryAll() throws Exception {
HttpSolrClient httpSolrClient = HttpSolrClientUtils.getHttpSolrClient();
String keywords="*:*";
//创建一个查询条件对象
SolrQuery solrQuery=new SolrQuery(keywords);
//查询
QueryResponse query = httpSolrClient.query(solrQuery);
//取出结果
SolrDocumentList results = query.getResults();
System.out.println("总条数:"+results.getNumFound());
for (SolrDocument result : results) {
System.out.println(result);
}
}
2. 分页
@Test
public void queryForPage() throws Exception{
HttpSolrClient httpSolrClient = HttpSolrClientUtils.getHttpSolrClient();
String keywords="*:*";
//创建一个查询条件对象
SolrQuery solrQuery=new SolrQuery(keywords);
int page=2;
int limit=3;
solrQuery.setStart((page-1)*limit);//设置从哪里开始查,不查页码
solrQuery.setRows(limit);//设置每页显示多少条
//查询
QueryResponse query = httpSolrClient.query(solrQuery);
//取出结果
SolrDocumentList results = query.getResults();
System.out.println("总条数:"+results.getNumFound());
for (SolrDocument result : results) {
System.out.println(result);
}
}
3. 排序
@Test
public void queryForSort() throws Exception{
HttpSolrClient httpSolrClient = HttpSolrClientUtils.getHttpSolrClient();
String keywords="*:*";
//创建一个查询条件对象
SolrQuery solrQuery=new SolrQuery(keywords);
// solrQuery.setSort("id",SolrQuery.ORDER.desc); //只能根据一个属性进行排序
solrQuery.setSort("age",SolrQuery.ORDER.asc);
//查询
QueryResponse query = httpSolrClient.query(solrQuery);
//取出结果
SolrDocumentList results = query.getResults();
System.out.println("总条数:"+results.getNumFound());
for (SolrDocument result : results) {
System.out.println(result);
}
}
4. 高亮
@Test
public void queryHeightLight() throws Exception{
HttpSolrClient httpSolrClient = HttpSolrClientUtils.getHttpSolrClient();
List<Person> personList=new ArrayList<>();
String keywords="name:吕布";
//创建一个查询条件对象
SolrQuery solrQuery=new SolrQuery(keywords);
//开户高亮
solrQuery.setHighlight(true);
//设置要进行高亮的属性
solrQuery.addHighlightField("name");
solrQuery.addHighlightField("remark");
//设置高亮的前后缀
solrQuery.setHighlightSimplePre("<font color=red>");
solrQuery.setHighlightSimplePost("</font>");
//查询
QueryResponse query = httpSolrClient.query(solrQuery);
//取出结果
SolrDocumentList results = query.getResults();
//取出高亮的结果
Map<String, Map<String, List<String>>> highlighting = query.getHighlighting();
System.out.println("总条数:"+results.getNumFound());
for (SolrDocument result : results) {//搜索处理的每个文档,进文档里面的内容进行高亮
Person person=new Person();
person.setId(Integer.valueOf(result.getFieldValue("id").toString()));
person.setName(result.getFieldValue("name").toString());
person.setAge(Integer.valueOf(result.getFieldValue("age").toString()));
person.setSex(result.getFieldValue("sex").toString());
person.setSalary(Double.valueOf(result.getFieldValue("salary").toString()));
person.setRemark(result.getFieldValue("remark").toString());
// System.out.println(result);
String id= (String) result.getFieldValue("id");
Map<String, List<String>> listMap = highlighting.get(id);
if(null!=listMap&&!listMap.isEmpty()){
List<String> name = listMap.get("name");
List<String> remark = listMap.get("remark");
// System.out.println(name.get(0)+" "+remark.get(0));
if(!StringUtils.isEmpty(name.get(0))){
person.setName(name.get(0));
}
if(!StringUtils.isEmpty(remark.get(0))){
person.setRemark(remark.get(0));
}
}
personList.add(person);
}
for (Person person : personList) {
System.out.println(person);
}
}
5. 范围
@Test
public void queryForRange() throws Exception{
HttpSolrClient httpSolrClient = HttpSolrClientUtils.getHttpSolrClient();
//创建条件
SolrQuery solrQuery=new SolrQuery("*:*");
//限定范围 20-40岁之间的
solrQuery.setFilterQueries("age:[20 TO 40]");
QueryResponse query = httpSolrClient.query(solrQuery);
//取出结果
SolrDocumentList results = query.getResults();
System.out.println("总条数:"+results.getNumFound());
for (SolrDocument result : results) {
System.out.println(result);
}
}
6. 过滤
@Test
public void queryForFilter() throws Exception{
HttpSolrClient httpSolrClient = HttpSolrClientUtils.getHttpSolrClient();
//创建条件
SolrQuery solrQuery=new SolrQuery("*:*");
//限定条件 年龄=33
solrQuery.setFilterQueries("age:33");
QueryResponse query = httpSolrClient.query(solrQuery);
//取出结果
SolrDocumentList results = query.getResults();
System.out.println("总条数:"+results.getNumFound());
for (SolrDocument result : results) {
System.out.println(result);
}
}
7. 合并域
7.1 在配置/usr/local/solr-7.7.3/server/solr/db2-core/conf/managed-schema中添加
<field name="keywords" type="text_en" uninvertible="false" multiValued="true" indexed="true" stored="true"/>
<copyField source="name" dest="keywords"/>
<copyField source="remark" dest="keywords"/>
7.2 控制台添加
7.3 重启solr
7.4 清空之前的数据,重新添加数据,查询
@Test
public void queryForArea() throws Exception{
HttpSolrClient httpSolrClient = HttpSolrClientUtils.getHttpSolrClient();
//创建条件
SolrQuery solrQuery=new SolrQuery("keywords:吕布");
QueryResponse query = httpSolrClient.query(solrQuery);
//取出结果
SolrDocumentList results = query.getResults();
System.out.println("总条数:"+results.getNumFound());
for (SolrDocument result : results) {
System.out.println(result);
}
}
8. 综合查询
@Test
public void queryZhongHe() throws Exception{
Map<String, String> filter=new HashMap<>();
//filter.put("age","33");
List<Map<String, Object>> list = queryAll("*", 1, 10, 1, "0-40", filter);
for (Map<String, Object> map : list) {
System.out.println(map);
}
}
public List<Map<String,Object>> queryAll(String keywords,int page,int limit,int ageSort,String ageRange,Map<String,String> filter){
HttpSolrClient httpSolrClient = HttpSolrClientUtils.getHttpSolrClient();
//条件构造
SolrQuery solrQuery=new SolrQuery("keywords:"+keywords);
//分页处理
solrQuery.setStart((page-1)*limit);
solrQuery.setRows(limit);
//排序
switch (ageSort){
case 0:
solrQuery.addSort("age",SolrQuery.ORDER.desc);
break;
case 1:
solrQuery.addSort("age",SolrQuery.ORDER.asc);
break;
}
//范围和过滤条件的处理
List<String> fqList=new ArrayList<>();
if(!StringUtils.isEmpty(ageRange)){
if(!ageRange.contains("-")){
throw new RuntimeException("年龄范围参数不合法");
}
String[] split = ageRange.split("-");
fqList.add("age:["+split[0]+" TO "+split[1]+"]");
}
if(filter!=null&&!filter.isEmpty()){
filter.forEach((k,v)->{
fqList.add(k+":"+v);
});
}
if(!fqList.isEmpty()){
solrQuery.setFilterQueries(fqList.toArray(new String[]{}));
}
//处理高亮
//设置要进行高亮的属性
solrQuery.addHighlightField("name");
solrQuery.addHighlightField("remark");
//设置高亮的前后缀
solrQuery.setHighlightSimplePre("<font color=red>");
solrQuery.setHighlightSimplePost("</font>");
try
{
List<Map<String,Object>> listMaps=new ArrayList<>();
QueryResponse query = httpSolrClient.query(solrQuery);
SolrDocumentList results = query.getResults();
Map<String, Map<String, List<String>>> highlighting = query.getHighlighting();
System.out.println("总条数:"+results.getNumFound());
for (SolrDocument result : results) {
Map<String,Object> map=new HashMap<>();
map.put("id",result.getFieldValue("id"));
map.put("name",result.getFieldValue("name"));
map.put("age",result.getFieldValue("age"));
map.put("sex",result.getFieldValue("sex"));
map.put("salary",result.getFieldValue("salary"));
map.put("remark",result.getFieldValue("remark"));
Map<String, List<String>> listMap = highlighting.get(map.get("id"));
if(null!=listMap&&!listMap.isEmpty()){
String name = listMap.get("name").get(0);
String remark = listMap.get("remark").get(0);
map.put("name",name);
map.put("remark",remark);
}
listMaps.add(map);
}
return listMaps;
}catch (Exception e){
e.printStackTrace();
}
return null;
}