-
solr的对象都是一个文档对象,所以要把对象 dao 转换为文档给 solr
-
在 schema.xml 中,设置业务系统Field,其中 field 标签中的 name 和 数据库里要搜索的字段一致。
<field name="item_title" type="text_ik" indexed="true" stored="true"/> <field name="item_sell_point" type="text_ik" indexed="true" stored="true"/> <field name="item_price" type="long" indexed="true" stored="true"/> <field name="item_image" type="string" indexed="false" stored="true" /> <field name="item_category_name" type="string" indexed="true" stored="true" /> <field name="item_desc" type="text_ik" indexed="true" stored="false" /> <field name="item_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/> <copyField source="item_title" dest="item_keywords"/> <copyField source="item_sell_point" dest="item_keywords"/> <copyField source="item_category_name" dest="item_keywords"/> <copyField source="item_desc" dest="item_keywords"/>
-
springmvc.xml
<!--1.添加命名空间 context 和 mvc --> <!--2. context 扫描 controller --> <!--3. mvc 注解驱动--> <!--4. mvc 默认--> <mvc:default-servlet-hanlder /> <!--5. 引入 spring-mybatis 文件-->
-
创建 spring-mybatis.xml
<!--1. 引入 namespace,context,aop,tx --> <!--2. context 扫描 service--> <!--3. context 引入 配置文件 db.properties--> <!--4. bean 注入 DruidSourceData--> <!--5. bean 注入 SQLSessionFactoryBean,spring 和 MyBatis 的完美结合--> <bean id="sf" class="SQLSessionFactoryBean"> <property name="typeAliasesPackage" value="com.james.pojo"/> <property name="mapperLocation" value="classpath:com/james/dao/*.xml"/> <property name="datasource" ref="ds"/> <property name="configlocation" value="classpath:mybatis-config.xml"/> </bean> <!--6. DAO接口所在包名,Spring会自动查找其下的类,MapperScannerConfigurer--> <bean class="MapperScannerConfigurer"> <property name="basePackage" value="com.james.dao" /> <property name="sqlSessionFactoryBeanName" value="sf" /> </bean> <!--7. 事务管理器--> <!-- tx 通知--> <!--8. aop 指定切点-->
-
SolrData.java
public class SolrData { //对应sql中字段起的别名 private String id; private String title; private long price; private String sellPoint; private String image; private String catName; private String itemDesc; }
-
完成dto,文件传输对象,不完全对应数据库的某张表,而是多表联合查询想要的字段。SoleDao.xml
<mapper namespace="com.james.dao.ISolrDao"> <select id="getAllData" resultType="solrData"> select i.id, i.title, i.price, i.sell_point sellPoint, i.image, c.name catName, d.item_desc itemDesc from tb_item i, tb_item_cat c, tb_item_desc d where i.cid = c.id and i.id = d.item_id limit 100 </select> </mapper>
-
将数据库中的数据写入Solr服务器,SolrController.java
@GetMapping("/dataFrom2Solr") public boolean dataFromDB2Solr() { return solrService.dataFromDB2Solr(); }
-
SolrServiceimpl.java
//我们想要把数据库中取出来的solrData的值set到scame.xml。 public boolean dataFromDB2Solr() { List<SolrData> list = solrDao.getAllData(); HttpSolrServer server = new HttpSolrServer(baseURL); SolrInputDocument document = null; for(SolrData sd:list) { ducument = new SolrInputDocument(); document.setField("id",sd.getId()); document.setField("item_title",sd.getTitle()); document.setField(""); server.add(document); } server.commit(); return true; } //根据关键字查找 public List<SolrData> getDataFromSolrByKeyWord(String keyword, int pageNum, int pageSize){ HttpSolrServer server = new HttpSolrServer(baseURL); SolrQuery query = new SolrQuery(); // 设置查询是否有关键字 try { if(StringUtils.isEmpty(keyword)){ query.setQuery("*:*"); }else{ query.setQuery(keyword); } // 设定默认查询的搜索域 query.set("df", "item_title"); int start = (pageNum - 1) * pageSize; int rows = pageSize; query.set("start", start); query.set("rows", rows); // 根据查询条件搜索索引库 QueryResponse response = server.query(query); // 从搜索到的数据中获取商品列表 SolrDocumentList list = response.getResults(); // 将商品列表放到dto中。 List<SolrData> datas = new ArrayList<>(); SolrData s = null; //取出solr服务器中获取到的值放入dto中。 for (SolrDocument sd : list) { System.out.println(sd + "00000000000"); s = new SolrData(); s.setId((String) sd.getFieldValue("id")); s.setCatName((String) sd.getFieldValue("item_category_name")); Object priceTemp = sd.getFieldValue("item_price"); s.setPrice(priceTemp == null ? 0: (long)priceTemp); s.setImage((String) sd.getFieldValue("item_image")); s.setItemDesc((String) sd.getFieldValue("item_desc")); s.setTitle((String) sd.getFieldValue("item_title")); s.setSellPoint((String) sd.getFieldValue("item_sell_point")); datas.add(s); } return datas; } catch (SolrServerException e) { e.printStackTrace(); } return null; } }
-
应用场景,将数据库中的大文本数据存储进solr搜索引擎,可以替代模糊查询,细粒度分词可以让查询更加全面和灵活。
-
完成 service,controller
-
完成dao,xml,注意:因为是接口+xml的格式,xml 中的 namespace 要和 dao 接口的全路径一致。
-
mybatis-config.xml,配置 mybatis 一些特有的,比如日志,STDOUT_LOGGING
-
db.properties
-
配置 web.xml,dispatchservlet,listener ,中文乱码等等
-
添加依赖:
-
druid / mysql / mybatis / mybatis-spring / spring-jdbc / spring-webmvc / jackson-databind ( jar ) / aspectJ / solr-solrJ / commons-lang / lombok /junit
-
-
目录结构:
-
配置文件:web.xml
-
resource 里 springmvc.xml
-
spring-mybatis.xml
-
db.properties
-
mybatis-config.xml,
-
com.james.pojo - SolrData.java
-
dao,service
-
-
新建一个 ssm 的 maven 项目,打包 war 。
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交