@ApiOperation(value="查询solr的高亮", notes="查询solr的高亮测试")
@ApiImplicitParams({@ApiImplicitParam(name="menuId", value="菜单id", required=true)
})
@GetMapping("/queryHighlight/{menuId}")
@Test //Result<Object>
public void queryHighlight() {//@NotNull(message = "menuId不可为空"),如果请求和参数相同,则使用@PathVariable("menuId") Integer menuId
Result<Object> result = null;
try {
List<String> url=new ArrayList<String>();
url.add("10.217.37.30:2181");
url.add("10.217.37.28:2182");
Optional<String> zkChoot=Optional.of("/");
CloudSolrClient.Builder builder=new CloudSolrClient.Builder(url,zkChoot);
CloudSolrClient solrClient=builder.build();
solrClient.setZkClientTimeout(10000);
solrClient.setZkConnectTimeout(1000000);
solrClient.setDefaultCollection("peiyajiecorecooletion");
//封装查询对象
//q查询关键字,默认为q=*.*;前面是域,后面是查询包含该字段
SolrQuery sql=new SolrQuery();//查询所有 "*:*"
//item_ittle:"苹果" 包含的意思
sql.setQuery("roleName:应急资源_市级");//为创建体哦阿健对象开始添加条件,页面模糊查询,并且可以分析器
sql.setSort("roleId", SolrQuery.ORDER.asc);//按照id升序
sql.setStart(0);//设置起始页
sql.setRows(3);//设置分页处理
//返回哪些字段,以逗号分隔
sql.set("fl","id,roleId,roleName");//只查询这两个areaName,id
//打开高亮开关
sql.setHighlight(true);//打开高亮开关
sql.addHighlightField("roleName");//设置高亮域
sql.setHighlightSimplePre("<em style='color:red;'>");//设置高亮前缀
sql.setHighlightSimplePost("</em>");//设置高亮后缀
//执行返回对象
try {
QueryResponse reponse=solrClient.query(sql);
SolrDocumentList list=reponse.getResults();
System.out.println("查询符合条件的个数有:"+list.getNumFound());
//高亮容器,最外面是id:v,域名和List集合,第一个map是文档id,第二个是高亮显示的字段名称
Map<String, Map<String, List<String>>> highlighting= reponse.getHighlighting();//获取高亮的结果,也可以说是高亮的容器
for(SolrDocument solrDocument:list){
String id= (String)solrDocument.get("id");
System.out.println("id:"+id);
String name=(String)solrDocument.getFieldValue("roleName");
System.out.println("name:"+name);
Map<String, List<String>> map=highlighting.get(id);//获取id为*的map
List<String> highlist=map.get("roleName");
System.out.println("map里面商品的名字为:"+highlist.get(0));
}
} catch (SolrServerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
result = Result.success();
} catch (Exception e) {
result = Result.error(ResultEnum.SERVER_EXCEPTION);
// logger.error("queryMenu --- "+e.getMessage(), e);
}
// return result;
}
注意常见问题:
https://www.cnblogs.com/davidwang456/p/5241429.html?_t=t
Collections:是solrCloud集群中一个完整的逻辑上倒排索引,和一个独立的config set相关联,由一个或者多个shard组成,shard可以在不同服务器上,shard对搜索接口来说适应性的,搜索着不用考虑搜索时如何指定shard,只需要传入collection名称即可。
Config set包含两个最根本的配置文件solrconfig.xml和schema.xml,视这两个文件的内容而定是否需要包含其他文件。SolrCloud的config set目录会上传到zookeeper中,而传统单机Solr的config set是保存在本地文件夹中。
Core:一个solr包含索引和配置文件运行的实例。一个replica对应一个core实例,同一个shard对应的replica的core配置和缩影是一样的,但是是不同的实例
Shard:collection一个逻辑分片,每个shard对应一个core,并且包含一个索引,一个shard有至少一个replica,当有多个replica选举。就相当于solr cores。