💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、豆包、星火、月之暗面及文生图、文生视频 广告
1.添加依赖 ~~~ <dependencies> <!-- Junit单元测试 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <dependency> <groupId>org.apache.solr</groupId> <artifactId>solr-solrj</artifactId> <version>4.10.2</version> </dependency> <!-- Solr底层会使用到slf4j日志系统 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.22</version> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version> </dependency> </dependencies> ~~~ 2.Book类 ~~~ package cn.li; import org.apache.solr.client.solrj.beans.Field; public class Book { @Field private String id; @Field private String name; @Field//需要将该字段添加到索引库 private String author; @Field private String description; public String getId() { return id; } public String getName() { return name; } public String getAuthor() { return author; } public String getDescription() { return description; } public void setId(String id) { this.id = id; } public void setName(String name) { this.name = name; } public void setAuthor(String author) { this.author = author; } public void setDescription(String description) { this.description = description; } public Book() { } public Book(String id, String name, String author, String description) { this.id = id; this.name = name; this.author = author; this.description = description; } @Override public String toString() { return "Book{" + "id='" + id + '\'' + ", name='" + name + '\'' + ", author='" + author + '\'' + ", description='" + description + '\'' + '}'; } } ~~~ 3.demo1 ~~~ package cn.li; import static org.junit.Assert.assertTrue; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.SolrServerException; 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.apache.solr.common.SolrInputDocument; import org.apache.solr.common.params.SolrParams; import org.junit.Test; import java.io.IOException; import java.util.Arrays; import java.util.List; /** * Unit test for simple App. */ public class SolrDemo { //新增索引 @Test public void createIndex(){ //创建solr服务对象 参数:solr服务的地址 并且需要指定到索引库位置 HttpSolrServer server=new HttpSolrServer("http://localhost:8080/solr/collection1"); //创建solr文档对象 SolrInputDocument document=new SolrInputDocument(); document.addField("id","7"); document.addField("name","西游记"); document.addField("author","吴承恩"); document.addField("description","这本书讲的是一个猴子和两个和尚西天取经的故事"); //添加文档 try { server.add(document); //提交 server.commit(); } catch (Exception e) { e.printStackTrace(); } } @Test public void createIndex_Bean(){ //创建solr服务对象 参数:solr服务的地址 并且需要指定到索引库位置 HttpSolrServer server=new HttpSolrServer("http://localhost:8080/solr/collection1"); //创建solr文档对象 Book book=new Book("8","红楼梦","曹雪芹","贾宝玉和林黛玉"); try { server.addBean(book); server.commit(); } catch (Exception e) { e.printStackTrace(); } } //删除 @Test public void deleteIndex(){ HttpSolrServer server=new HttpSolrServer("http://localhost:8080/solr/collection1"); try { //根据单个id删除 //server.deleteById("8"); //根据id集合删除 //server.deleteById(Arrays.asList("7","8")); //根据查询语句进行删除 server.deleteByQuery("id:8"); server.commit(); } catch (Exception e) { e.printStackTrace(); } } //查询 @Test public void selectIndex(){ HttpSolrServer server=new HttpSolrServer("http://localhost:8080/solr/collection1"); //创建solr查询参数 参数:查询条件 SolrParams params=new SolrQuery("description:著作"); try { //执行查询 并返回查询结果 QueryResponse response = server.query(params); //解析查询结果 获取文档列表 SolrDocumentList results = response.getResults(); System.out.println("共找到条数:"+results.getNumFound()); for (SolrDocument result:results ) { System.out.println("id"+result.get("id")); System.out.println("name"+result.get("name")); System.out.println("author"+result.get("author")); System.out.println("description"+result.get("description")); } } catch (SolrServerException e) { e.printStackTrace(); } } @Test public void selectIndex_Bean(){ HttpSolrServer server=new HttpSolrServer("http://localhost:8080/solr/collection1"); //创建solr查询参数 参数:查询条件 SolrParams params=new SolrQuery("*:*"); try { //执行查询 并返回查询结果 QueryResponse response = server.query(params); //解析查询结果 获取文档列表 SolrDocumentList results = response.getResults(); System.out.println("共找到条数:"+results.getNumFound()); List<Book> books = response.getBeans(Book.class); for (Book boook:books){ System.out.println(boook); } } catch (SolrServerException e) { e.printStackTrace(); } } } ~~~ 4.demo2 ~~~ package cn.li; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.solrj.impl.HttpSolrServer; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.common.params.SolrParams; import org.junit.Test; import java.util.List; import java.util.Map; public class SolrDemo2 { //分页 //每页显示3条 @Test public void page(){ int pageNum=1;//当前页 int rows=3;//每页显示条数 HttpSolrServer server=new HttpSolrServer("http://localhost:8080/solr/collection1"); SolrQuery params=new SolrQuery("*:*"); params.setStart((pageNum-1)*rows);//设置起始条数 params.setRows(rows);//设置每页数量 try { QueryResponse query = server.query(params); List<Book> books = query.getBeans(Book.class); System.out.println(("查询条数:" + books.size())); for(Book book:books){ System.out.println(book); } } catch (SolrServerException e) { e.printStackTrace(); } } //排序 @Test public void sort(){ HttpSolrServer server=new HttpSolrServer("http://localhost:8080/solr/collection1"); SolrQuery params=new SolrQuery("*:*"); //设置排序字段 升序还是降序 参数:1.排序字段 2.asc升序 默认是升序 desc降序 params.setSort("id", SolrQuery.ORDER.desc); try { QueryResponse query = server.query(params); List<Book> books = query.getBeans(Book.class); System.out.println(("查询条数:" + books.size())); for(Book book:books){ System.out.println(book); } } catch (SolrServerException e) { e.printStackTrace(); } } //高亮 @Test public void highLighter(){ HttpSolrServer server=new HttpSolrServer("http://localhost:8080/solr/collection1"); SolrQuery params=new SolrQuery("id:[2 TO 5]"); //添加高亮字段 params.addHighlightField("description"); //设置高亮前缀和后缀 params.setHighlightSimplePre("<em>"); params.setHighlightSimplePost("</em>"); try { QueryResponse query = server.query(params); //获取高亮数据 Map<String, Map<String, List<String>>> highlighting = query.getHighlighting(); /* * 外层map的key是当前文档的id * 内层map:key是高亮字段名 * value:集合?【要考虑到多值字段】高亮字段的值 * */ List<Book> books = query.getBeans(Book.class); System.out.println(("查询条数:" + books.size())); for(Book book:books){ String bookId = book.getId(); Map<String, List<String>> stringListMap = highlighting.get(bookId); List<String> description = stringListMap.get("description"); if(description!=null&&description.size()>0){ book.setDescription(description.get(0)); } System.out.println(book); } } catch (SolrServerException e) { e.printStackTrace(); } } } ~~~