1.解压tomcat,解压solr压缩包,(solr-4.10.3.zip是window下,solr-4.10.3.tgz.tgz是linux)
2.——>Solr\solr-4.10.3\dist下找到 solr-4.10.3.war 放置到--->Tomcat\apache-tomcat-7.0.52\webapps下
*(注意这里) 将solr-4.10.3.war 改名为solr方便访问*
3.启动tomcat Tomcat\apache-tomcat-7.0.52\bin startup.bat点击启动
4.解压solr-4.10.3.war 之后 在Solr\solr-4.10.3\example\lib\ext 下
复制里面所有的jar包(扩展包)到-》Tomcat\apache-tomcat-7.0.52\webapps\solr\WEB-INF\lib
5.solr的存储: 存储在Solr\solr-4.10.3\example\下的 solr文件夹
讲solr文件夹 复制到任意盘符下的根目录 更名为solrhome
打开solrhome:下面的 collection1 相当于一个数据库
(重点)在solrhome\collection1\conf 目录下的 schema.xml相当于数据库设置 也是最主要的修改和配置文件
6.在solr-4.10.3.war解压后的 Tomcat\apache-tomcat-7.0.52\webapps下 web.xml 中修改
<!--
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>/put/your/solr/home/here</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
-->
将此标签打开并在<env-entry-value>/put/your/solr/home/here</env-entry-value>中配置 solrhome的路径
<env-entry-value>D:\solrhome</env-entry-value>
7.启动tomcat 在页面访问http://localhost:8080/solr 出现页面即为成功
*如果访问不成功检查一下Tomcat\apache-tomcat-7.0.52\webapps solr的名称(war包解压的之后的名称)
*或者端口占用
8.配置IKAnalyzer中文分词器
(1).解压压缩包
(2).将IKAnalyzer2012FF_u1.jar放置在 -》Tomcat\apache-tomcat-7.0.52\webapps\solr\WEB-INF\lib
(3).在Tomcat\apache-tomcat-7.0.52\webapps\solr\WEB-INF 新建文件夹 classes 文件夹
将ext_stopword.dic : 停词词典
IKAnalyzer.cfg.xml : 配置扩展词典和 停词词典的位置
mydict.dic : 扩展词典
这三个文件放置在 classes文件夹下
(4).在solrhome\collection1\conf 目录下的 schema.xml
加入配置: (配置字段类型 text_ik (可以自定义) <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/> 配置的是分析器,就是导入的IKAnalyzer2012FF_u1.jar,使用的是其中一个类)
<fieldType name="text_ik" class="solr.TextField">
<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
(5).重启tomcat
逻辑分析: 第一次将数据库中的数据用solrUtil这个module导入solr之后,查询或者条件查询只是从solr这个nosql数据库中查询,
而不再和数据库有交互,
//pojo层导包
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-solr</artifactId>
<version>1.5.5.RELEASE</version>
</dependency>
//导入配置文件
applicationContext-solr.xml
//@File 注解 (在对应的实体类中)
@Field :意思是把Java对象的属性和solr里面配置的域进行一一对应。
如果没有写参数,默认值为属性名称
@Field
private String id;
@Field("name")
private String username;
@Field("cat")
private String passwrod;
//小案例: * 这里是service 层 从solr中查询
@Autowired
private SolrTemplate solrTemplate;
-------------------------------------》》》》
TbItem item=new TbItem();
item.setId(1L);.......
solrTemplate.saveBean(item);
solrTemplate.commit(); //一定要记得提交 *增删改 都要commint()
-------------------------------------》》》》
TbItem item = solrTemplate.getById(1, TbItem.class);//按主键查询
-------------------------------------》》》》
solrTemplate.deleteById("1");//按主键删除
solrTemplate.commit();
-------------------------------------》》》》
solrTemplate.saveBeans(list); //添加一个集合
solrTemplate.commit();
-------------------------------------》》》》
Query query=new SimpleQuery("*:*");//删除所有
solrTemplate.delete(query);
solrTemplate.commit();
-------------------------------------》》》》
Query query=new SimpleQuery("");//按条件删除
Criteria criteria=new Criteria("item_title").contains("2"); //设置一个条件
Criteria criteria=new Criteria("item_title").in(集合);
query.addCriteria(criteria);
solrTemplate.delete(query);
solrTemplate.commit();
-------------------------------------》》》》
****分页查询
Query query=new SimpleQuery("*:*");
query.setOffset(20);//开始索引(默认 0) 从第20条开始
query.setRows(20);//每页记录数(默认 10) 查询20条数据
ScoredPage<TbItem> page = solrTemplate.queryForPage(query, TbItem.class);
List<TbItem> list = page.getContent(); //当前页的数据
page.getTotalElements() //总记录数
page.getTotalPages() //总页数
-------------------------------------》》》》
****条件查询
Query query=new SimpleQuery("*:*");
---------
Criteria criteria=new Criteria("item_title").contains("2"); //设置一个条件
criteria=criteria.and("item_title").contains("5"); //再添加一个条件
query.addCriteria(criteria);
---------
ScoredPage<TbItem> page = solrTemplate.queryForPage(query, TbItem.class);
List<TbItem> list = page.getContent(); //当前页的数据
page.getTotalElements() //总记录数
page.getTotalPages() //总页数
-------------------------------------》》》》
//Controller
@Reference
private ItemSearchService itemSearchService;
@RequestMapping("/search.do")
public Map search(@RequestBody Map searchMap){
return itemSearchService.search(searchMap);
}