版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/java20150326/article/details/83717907
1.solr详细介绍与java操作
https://blog.csdn.net/bskfnvjtlyzmv867/article/details/80940089
Java操作SOLR很全面的文章。
2.solr管理界面定时
暂时没有调试成功
3.quartz方式定时
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>7.3.0</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.3</version>
<exclusions>
<exclusion>
<artifactId>c3p0</artifactId>
<groupId>c3p0</groupId>
</exclusion>
</exclusions>
</dependency>
<!-- 要调用的工作类-->
<bean id="myproductSearchIndex" class="com.xx.xx.handler.MyproductSearchIndex"></bean>
<bean id="jobTask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 调用的类 -->
<property name="targetObject" ref="myproductSearchIndex"/>
<!-- 调用类中的方法 -->
<property name="targetMethod" value="run"/>
<!--表示不并发操作-->
<property name="concurrent" value="false"/>
</bean>
<!-- 配置定时器时间间隔 -->
<!-- 定义时间间隔触发器 */10 * * * * ?表示每隔10秒执行一次-->
<bean id="jobTaskTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail">
<ref bean="jobTask" />
</property>
<property name="cronExpression">
<value>0 0/30 * * * ?</value><!-- 每隔30分执行一次 -->
</property>
</bean>
<!--配置启动定时器-->
<bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="applicationContextSchedulerContextKey" value="applicationContext" />
<property name="triggers">
<list>
<ref bean="jobTaskTrigger" />
</list>
</property>
</bean>
MyproductSearchIndex.java
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrRequest;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.request.QueryRequest;
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.MapSolrParams;
import org.apache.solr.common.util.NamedList;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
@Component
public class MyproductSearchIndex {
private static final Logger LOGGER = LoggerFactory.getLogger(MyproductSearchIndex.class);
enum Command {
DELTA_IMPORT, FULL_IMPORT
}
public void run() {
try {
// solr服务的url,my_core是前面创建的solr core
String url = "http://localhost:4012/solr7/my_core";
// 创建HttpSolrClient
SolrClient solrClient = new HttpSolrClient.Builder(url)
.withConnectionTimeout(5000)
.withSocketTimeout(5000)
.build();
SolrRequest<QueryResponse> request = buildRequest(Command.DELTA_IMPORT, "SYSROLE");
request.setPath("/dataimport");
NamedList<Object> resp = solrClient.request(request, null);
LOGGER.info(" 重建索引成功,具体结果:" + resp.toString());
} catch (Exception e) {
LOGGER.info(" 重建索引成功,异常信息:" + e.getMessage());
e.printStackTrace();
}
}
private SolrRequest<QueryResponse> buildRequest(Command command, String entity) {
Map<String, String> map = new HashMap<>();
switch (command) {
case DELTA_IMPORT:
map.put("command", "delta-import");
map.put("clean", "false");
map.put("commit", "true");
map.put("optimize", "false");
map.put("index", "false");
map.put("entity", entity);
map.put("debug", "false");
map.put("wt", "json");
return new QueryRequest(new MapSolrParams(map));
case FULL_IMPORT:
map.put("command", "full-import");
map.put("clean", "true");
map.put("commit", "true");
map.put("optimize", "false");
map.put("entity", entity);
map.put("index", "false");
map.put("debug", "false");
map.put("wt", "json");
return new QueryRequest(new MapSolrParams(map));
}
return null;
}
public void insertOrUpdateIndex() throws IOException, SolrServerException {
// solr服务的url,my_core是前面创建的solr core
String url = "http://localhost:4012/solr7/my_core";
// 创建HttpSolrClient
HttpSolrClient client = new HttpSolrClient.Builder(url)
.withConnectionTimeout(5000)
.withSocketTimeout(5000)
.build();
// 创建Document对象
SolrInputDocument document = new SolrInputDocument();
document.addField("id", "1111");
document.addField("NAME", "Solr入门xxxxyy");
document.addField("ENNAME", "Solr版本差异也太大了xxxxyy");
document.addField("DATASCOPE", "Solr版本差异也太大了DATASCOPExxxyy");
client.add(document);
client.commit();
}
public void deleteIndex() throws IOException, SolrServerException {
String url = "http://localhost:4012/solr7/my_core";
HttpSolrClient client = new HttpSolrClient.Builder(url)
.withConnectionTimeout(5000)
.withSocketTimeout(5000)
.build();
client.deleteById("1111");
client.commit();
// 根据条件删除
//client.deleteByQuery("id:1111");
// 全部删除
//client.deleteByQuery("*:*");
}
public void simpleSearch() throws IOException, SolrServerException {
String url = "http://localhost:4012/solr7/my_core";
HttpSolrClient client = new HttpSolrClient.Builder(url)
.withConnectionTimeout(5000)
.withSocketTimeout(5000)
.build();
// 创建SolrQuery
SolrQuery query = new SolrQuery();
// 输入查询条件
query.setQuery("NAME:*x");
query.setRows(20);
// 执行查询并返回结果
QueryResponse response = client.query(query);
// 获取匹配的所有结果
SolrDocumentList list = response.getResults();
// 匹配结果总数
long count = list.getNumFound();
System.out.println("总结果数:" + count);
for (SolrDocument document : list) {
System.out.println(document.get("id"));
System.out.println(document.get("NAME"));
System.out.println(document.get("ENNAME"));
System.out.println(document.get("DATASCOPE"));
System.out.println("================");
}
}
}
4.cosn
5.shell