1.建立在Lucene(全文搜索引擎)之上,不仅限于搜索,Solr也可以用于存储目的。像其他NoSQL数据库一样,它是一种非关系数据存储和处理技术(需引入中文分析器)
2.复制域的作用在于将某一个Field中的数据复制到另一个域中(联合搜索)
3.需要动态扩充字段时,使用动态域。
<field name="item_goodsid" type="long" indexed="true" stored="true"/>
<field name="item_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/>
<copyField source="item_title" dest="item_keywords"/>
<dynamicField name="item_spec_*" type="string" indexed="true" stored="true" />
3.简单使用
1.pom.xml引入依赖
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-solr</artifactId>
<version>1.5.5.RELEASE</version>
</dependency>
2.配置 applicationContext-solr.xml
<!-- 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>
3.实体类属性使用@Field注解标识 。如果属性与配置文件定义的域名称不一致,需要在注解中指定域名称
public class TbItem implements Serializable{
@Field
private Long id;
@Field("item_title")
private String title;
@Dynamic
@Field("item_spec_*")
private Map<String,String> specMap; //动态域
....
}
.4.调用方法存数据进索引库
@Autowired
private SolrTemplate solrTemplate;
solrTemplate.saveBeans(itemList);
solrTemplate.commit();
...
Query query=new SimpleQuery("*:*");
Criteria criteria=new Criteria("item_title").contains("2");
criteria=criteria.and("item_title").contains("5"); //继续添加条件
query.addCriteria(criteria);
//query.setOffset(20);//开始索引(默认0)
//query.setRows(20);//每页记录数(默认10)
ScoredPage<TbItem> page = solrTemplate.queryForPage(query, TbItem.class);
补:
1.读取配置文件创建对象:
ApplicationContext context=new ClassPathXmlApplicationContext("classpath*:spring/applicationContext*.xml");
SolrUtil solrUtil= (SolrUtil) context.getBean("solrUtil");
//加载配置文件创建Bean对象
2.将spec字段中的json字符串转换为map
Map specMap= JSON.parseObject(item.getSpec());