SpringDataSolr

solr跟elasticSearch的区别:
	1.solr对单机和少量集群比较快,elasticSearch对大量集群比较快
	2.solr对实时搜索不太友好,elasticSearch对实时搜索非常友好
	3.solr的后台是Apache有一个成熟的社区,而elasticSearch相对较新
solr的域使用:
	注意:solr中的域,必须先在solrhome/索引库/config/schema.xml中声明才能使用

solr中的域:
	声明域:
	<field name="item_title" type="text_ik" index="true" stored="true" multiValued="false"/>
		name="item_title" :给域起个名字。域名。
		type="text_ik" :域的类型,域的类型也是要先声明后使用的。----- 是否要分词?
		indexed="true"	:是否索引?
		stored="true"	:是否要存储?
		multiValued="true" :是否多值?可选的
	复制域:(默认搜索域)
	<field 	name="item_keywords" type="text_ik" indexed="true" multiValued="true"/>
	<copyField source="item_title" dest="item_keywords"/>
	<copyField source="item_category" dest="item_keywords"/>
		source=一个已经定义好的域名,当这个域进行存储的时候,会将索引复制一份到item_keywords中,这样搜索item_keywords就可以搜索到item_title存储的索引,再从item_title中将存储的内容返回
	动态域:当不知道有多少域,或不知道域名叫什么的时候,就用动态域。
	<dynamicField name="attr_*" type="text_general" indexed="true" stored="true" multiValued="true"/>
		name="attr_*":域名,* 通配符,只要是以attr_开头的域,都认。
	ID域:唯一!!必须存在!!
	<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" /> 
		required="true":必须有的
		<uniqueKey>id</uniqueKey>唯一的。
		
SolrTemplate API
@RunWith(SpringJunit4ClassRunner.class)
@ContextConfiguration(locations="classpath:spring/applicationContext-solr.xml")
@SuppressWarnings("ALL")
public class SolrTest{
	@Autowired
	private SolrTemplate solrTemplate;
	@Test	//保存,修改
    public void testSaveBean(){
		TbItem item = new TbItem();
		solrTemplate.saveBean(item);
    }
	@Test	//批量保存,修改
    public void testSaveBeans(){
		List list = new ArrayList<>();
		TbItem item = new TbItem();
		list.add(item);
		solrTemplate.saveBeans(list);
    }
	@Test	//根据主键id删除
	public void testDeleteById(){
		 solrTemplate.deleteById("1");
    }
	@Test	//清空索引库,根据查询结果删除
    public void testDelete(){
        solrTemplate.delete(new SimpleQuery("*:*"));
    }
	
	@Test	//分页查询
    public void testQueryForPage(){
		Query query = new SimpleQuery();
		query.setOffset(0);		//开始的索引(默认0),等同于mysql的limit
		query.setRows(10);		//每页显示的记录数(默认10)
		ScoredPage<TbItem> scoredPage = solrTemplate.queryForPage(query,TbItem.class);
         //查询结果的总记录数
         System.out.println("总记录数:"+scoredPage.getTotalElements());
         //分页查询的结果的集合
         List<TbItem> litemList = scoredPage.getContent();
    }
    @Test	//分页条件查询
    public void testQueryForPageAndCondition(){
		...
          Cirteria criteria = new Criteria("item_title").is("华为");
            criteria.and("item_title").contains("1");
            query.addCriteria(criteria);
         ...
    }
is和contains的区别:
	is和contains都相当于一个term,但是is只会对指定的field原样查询,contains会对指定的field先分词再查询
    eg: 华为Mate20 -->is("华") 无法匹配 -->contains("华") 匹配成功        
            
}

TbItem实体类
1.@Field注解的value属性值对应field标签的name属性值,主键id不需要value
2.solr中的域必须先在solrhome/schema.xml中配置声明
public class TbItem implements Serializable{
	@Field
	private Long id;
	@Field("item_title")
	private String title;
	@Dynamic
	@Field("item_*")
	private String itemList;
	.....
}
依赖及配置
1.maven依赖
	<dependency>
	    <groupId>org.springframework.data</groupId>
	    <artifactId>spring-data-solr</artifactId>
	    <version>1.5.5.RELEASE</version>
	</dependency> 
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-test</artifactId>
		<version>4.2.4.RELEASE</version>
	</dependency>
	<dependency>
		<groupId>junit</groupId>
		<artifactId>junit</artifactId>
		<version>4.9</version>
	</dependency>
2.配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:solr="http://www.springframework.org/schema/data/solr"
	xsi:schemaLocation="http://www.springframework.org/schema/data/solr 
  		http://www.springframework.org/schema/data/solr/spring-solr-1.0.xsd
		http://www.springframework.org/schema/beans 
		http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context 
		http://www.springframework.org/schema/context/spring-context.xsd">
	<!-- solr服务器地址 -->
	<solr:solr-server id="solrServer" url="http://127.0.0.1:8080/solr" />
	<!-- solr模板,使用solr模板可对索引库进行CRUD的操作 -->
	<bean id="solrTemplate" class="org.springframework.data.solr.core.SolrTemplate">
		<constructor-arg ref="solrServer" />
	</bean>
</beans>

猜你喜欢

转载自blog.csdn.net/qq_42514129/article/details/83960911
今日推荐