一、新建Maven项目,配置POM.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.test</groupId>
<artifactId>solr2</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>solr2</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>7.3.1</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.3</version>
</dependency>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils-core</artifactId>
<version>1.8.3</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
</project>
二、新增文件到Solr
package com.test.solr2;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.response.UpdateResponse;
import org.apache.solr.common.SolrInputDocument;
public class AddFile {
private HttpSolrClient client = null;
public AddFile()
{
String url = "http://localhost:8984/solr/new_core";
client = new HttpSolrClient.Builder(url).build();
}
//第一个方法添加数据
//使用Field向文档中添加数据
public void add() throws Exception {
SolrInputDocument doc = new SolrInputDocument();
doc.addField("id", "001");
doc.addField("name", "古方红糖 月子经期红糖块180g*2升级套装");
doc.addField("image", "https://img13.360buyimg.com/n5/jfs/t20920/173/1142147683/248224/59ccbdcd/5b20d81aN0ed918b5.jpg");
doc.addField("url", "https://item.jd.com/1714158.html");
doc.addField("content", "【618大促价59元,领券再享8.8折,买5送1原品!18日0点开抢,敬请期待!】更多活动商品请点击");
System.out.println("================="+doc);
client.add(doc);
UpdateResponse up = client.commit();
}
//第二个方法通过对象添加数据
//使用Field向文档中添加数据
public void addBean() throws Exception {
ProductInfo pi = new ProductInfo();
pi.setId("002");
pi.setName("古方红糖 月子经期红糖块180g*2升级套装");
pi.setImage("https://img13.360buyimg.com/n5/jfs/t20920/173/1142147683/248224/59ccbdcd/5b20d81aN0ed918b5.jpg");
pi.setUrl("https://item.jd.com/1714158.html");
pi.setContent("【618大促价59元,领券再享8.8折,买5送1原品!18日0点开抢,敬请期待!】更多活动商品请点击");
client.addBean(pi);
UpdateResponse up = client.commit();
}
public static void main(String[] args) {
try
{
AddFile af = new AddFile();
//af.add();
af.addBean();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
运行后,通过控制台查询

查看一下后台自动生成的Field列表

三、通过类添加Solr数据
新建ProductInfo类
package com.test.solr2;
import java.io.Serializable;
import java.util.Date;
import org.apache.solr.client.solrj.beans.Field;
public class ProductInfo implements Serializable{
@Field
private String id = null;
@Field("name")
private String name = null;
@Field("image")
private String image = null;
@Field
private String url = null;
@Field
private String content = null;
public ProductInfo(){}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
通过HttpSolrClient.addBean添加数据

查询结果

四、查询数据

查询结果

五、查询结果返回对象类型
以对象形式返回结果集,需要对数据进行一次转化,使用SolrUtil类完成转化。
向Solr7.3.1中添加数据,默认属性都设置为多值的,数据以[]包括起来,查询返回时需要将[]取掉

SolrUtil类定义
package com.test.solr2;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
public class SolrUtil {
public static final <T> List<T> getBeans(Class<T> clazz,
SolrDocumentList solrDocumentList) throws Exception{
List<T> list = new ArrayList<T>();
T t = null;
for (SolrDocument solrDocument : solrDocumentList)
{
//反射出实例
t = clazz.newInstance();
//获取所有属性
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields)
{
Object val = solrDocument.get(field.getName());
if(val != null)
{
String val2 = val.toString();
if(val2.startsWith("[") && val2.endsWith("]"))
val2 = val2.substring(1,val2.length()-1);
System.out.println(field.getName()+","+val2);
BeanUtils.setProperty(t, field.getName(), val2);
}
}
list.add(t);
}
return list;
}
public static final <T> T getBean(Class<T> clazz,
SolrDocument solrDocument) throws Exception {
//反射出实例
T t = clazz.newInstance();
//获取所有属性
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
// 如果注解为默认的 采用此属性的name来从solr中获取值
BeanUtils.setProperty(t, field.getName(), solrDocument.get(field.getName()));
}
return t;
}
}
六、查询高亮显示

七、删除文档

八、更新文档数据
更新之前数据
修改后数据

5714

被折叠的 条评论
为什么被折叠?



