博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
solr7集群 springboot_Springboot2(44)集成solr7,solrCloud
阅读量:5149 次
发布时间:2019-06-13

本文共 4131 字,大约阅读时间需要 13 分钟。

引入依赖

org.springframework.boot

spring-boot-starter-data-solr

添加配置(application.yml)

#solrcloud配置

spring.data.solr.repositories.enabled: true

spring.data.solr.zk-host: 10.10.2.137:2181,10.10.2.138:2181,10.10.2.139:2181

#单机配置

#spring.data.solr.host: http://localhost:8080/solr

#spring.data.solr.core: collection1

添加solr对象

@Data

@Accessors(chain = true)

@SolrDocument(solrCoreName = "demo")

public class UserDto {

@Field("id")

private String userId;

@Field("address")

private String address;

@Dynamic //动态域

@Field("item_spec_*")

private Map specMap;//最好将范型加上

}

solrCoreName为对应collection名称

添加Repository类

@Repository

public interface UserRepository extends SolrCrudRepository {

@Query(value="address:?0",fields ={"address"},filters = {"id:?0"})

public List findByPage(String searchTerm, Pageable Pageable);

}

通过?0获取searchTerm的值,@Query中的value等于q查询,filters等于fq查询

基本查询

q 查询的关键字,此参数最为重要,例如,q=id:1,默认为q=:,

fl 指定返回哪些字段,用逗号或空格分隔,注意:字段区分大小写,例如,fl= id,title,sort

start 返回结果的第几条记录开始,一般分页用,默认0开始

rows 指定返回结果最多有多少条记录,默认值为 10,配合start实现分页

sort 排序方式,例如id desc 表示按照 “id” 降序

wt (writer type)指定输出格式,有 xml, json, php等

fq (filter query)过虑查询,提供一个可选的筛选器查询。返回在q查询符合结果中同时符合的fq条件的查询结果,例如:q=id:1&fq=sort:[1 TO 5],找关键字id为1 的,并且sort是1到5之间的。

df 默认的查询字段,一般默认指定。

qt (query type)指定那个类型来处理查询请求,一般不用指定,默认是standard。

indent 返回的结果是否缩进,默认关闭,用 indent=true|on 开启,一般调试json,php,phps,ruby输出才有必要用这个参数。

version 查询语法的版本,建议不使用它,由服务器指定默认值。

Solr的检索运算符

“:” 指定字段查指定值,如返回所有值*?

“?” 表示单个任意字符的通配

“” 表示多个任意字符的通配(不能在检索的项开始使用或者?符号)

“~” 表示模糊检索,如检索拼写类似于”roam”的项这样写:roam将找到形如foam和roams的单词;roam0.8,检索返回相似度在0.8以上的记录。

AND、|| 布尔操作符

OR、&& 布尔操作符

NOT、!、-(排除操作符不能单独与项使用构成查询)

“+” 存在操作符,要求符号”+”后的项必须在文档相应的域中存在²

( ) 用于构成子查询

[] 包含范围检索,如检索某时间段记录,包含头尾,date:[201507 TO 201510]

{} 不包含范围检索,如检索某时间段记录,不包含头尾date:{201507 TO 201510}

添加Service类

@Service

public class UserService {

@Resource

UserRepository userRepository;

public void save(UserDto userDto){

userRepository.save(userDto);

}

//查找第一页的数据,按ID升序排序

public List queryByPage(String search){

Pageable pageable = PageRequest.of(0,3,new Sort(Sort.Direction.ASC, "id"));

return userRepository.findByPage(search,pageable);

}

}

添加controller方法(测试)

@RestController

public class SolrController {

@Autowired

private UserService userService;

@RequestMapping("/add/{id}")

public String add(@PathVariable String id,@RequestBody String address){

userService.save(new UserDto().setUserId(id).setAddress(address));

return id;

}

@RequestMapping("/query")

public String query(@RequestBody String address){

List list = userService.queryByPage(address);

return JSON.toJSONString(list);

}

}

高亮查询

public List queryHeightLight(String address){

List itemList = new ArrayList<>();

HighlightQuery highlightQuery = new SimpleHighlightQuery(new SimpleStringCriteria("address:开平"));

HighlightOptions options = new HighlightOptions();

options.addField("address");

options.setSimplePrefix("

");

options.setSimplePostfix("");

highlightQuery.setHighlightOptions(options);

HighlightPage page = solrTemplate.queryForHighlightPage("demo",highlightQuery,Item.class);

//获取高亮数据

List> highlighted = page.getHighlighted();

for (HighlightEntry itemHighlightEntry : highlighted) {

//获取SKU信息

Item item = itemHighlightEntry.getEntity();

//获取高亮数据

List highlights = itemHighlightEntry.getHighlights();

//高亮数据

if(highlights!=null && highlights.size()>0 && highlights.get(0).getSnipplets()!=null

&& highlights.get(0).getSnipplets().size()>0){

String snipplets = highlights.get(0).getSnipplets().get(0);

//替换高亮数据

item.setTitle(snipplets);

itemList.add(item);

}

}

return itemList;

}

创建文件索引

/**

* 创建文件索引

*/

public void upFile(){

userRepository.deleteAll();

ContentStreamUpdateRequest up = new ContentStreamUpdateRequest(

"/update/extract");

File file = new File("C:/Users/Administrator/Desktop/demo/test.txt");

try{

up.addFile(file,"text/plain");

up.setAction(AbstractUpdateRequest.ACTION.COMMIT, true, true);

CloudSolrClient solrClient = ((CloudSolrClient)solrTemplate.getSolrClient());

solrClient.setDefaultCollection("demo");

solrClient.request(up);

QueryResponse query = solrClient.query(new SolrQuery("*:*"));

SolrDocumentList results = query.getResults();

System.out.println(results);

}catch (Exception e){

}

}

转载地址:http://nadnv.baihongyu.com/

你可能感兴趣的文章
ffmpeg-php
查看>>
别把淘宝客当傻子
查看>>
MySQL 数据库性能优化之SQL优化
查看>>
Bootstrap
查看>>
C语言错误: HEAP CORRUPTION DETECTED
查看>>
bzoj1102 [POI2007]山峰和山谷Grz
查看>>
【Java基础】Java类的加载和对象创建流程的详细分析
查看>>
2018-2019-1 20165231《信息安全系统设计基础》第二周学习总结
查看>>
iOS之文本属性Attributes的使用
查看>>
从.Net版本演变看String和StringBuilder性能之争
查看>>
Android编程获取网络连接状态(3G/Wifi)及调用网络配置界面
查看>>
Excel操作 Microsoft.Office.Interop.Excel.dll的使用
查看>>
XlFileFormat
查看>>
Windows消息机制(转)1
查看>>
大话设计模式-职责链模式
查看>>
解决Ubuntu下博通网卡驱动问题
查看>>
Oracle中的instead of触发器
查看>>
【翻译】7个ASP.NET MVC最佳实践
查看>>
EF Core 2.1变化
查看>>
转:C++ Applications
查看>>