七、Dataimport
可以使用Solr自带的Dataimport功能把数据库中数据快速导入到solr中.
必须保证managed-schema和数据库中表的列对应。
1.修改配置文件
修改solrconfig.xml,添加下面内容
<!-- 配置数据导入的处理器 --> <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> <lst name="defaults"> <!-- 加载data-config.xml --> <str name="config">data-config.xml</str> </lst> </requestHandler>
2.新建data-config.xml
和solrconfig.xml同一目录下新建data-config.xml
<?xml version="1.0" encoding="UTF-8"?> <dataConfig> <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://10.10.83.241:3306/mashibing" user="root" password="root"/> <document> <entity name="product" query="SELECT id,name,price from t_product"> <!-- 实现数据库的列和索引库的字段的映射 column 指定数据库的列表 name 指定索引库的字段名字,必须和schema.xml中定义的一样 --> <field column="id" name="id"/> <field column="name" name="name"/> <field column="price" name="price"/> </entity> </document> </dataConfig>
3.添加jar
向solr-webapp中添加三个jar。在dist中两个还有一个数据库驱动。
4.操作
重启solr后,在可视化管理页面中进行数据导入。
注意:
点击导入按钮后,要记得点击刷新按钮。
八、菜单项目Documents使用办法
以XML格式举例
1.新增/修改
当id不存在时新增,当id存在修改。
<doc> <field name="id">8</field> <field name="name">明天更大卖</field> <field name="price">98</field> </doc>
2.删除
2.1根据主键删除
<delete> <id>8</id> </delete> <commit/>
2.2根据条件删除
<delete> <query>*:*</query> </delete>
九、使用SolrJ操作Solr
SolrJ是Solr提供的Java客户端API。通过SolrJ可以实现Java程序对Solr中数据的操作。
大前提:添加SolrJ依赖。依赖版本和Solr版本严格对应
<dependencies> <dependency> <groupId>org.apache.solr</groupId> <artifactId>solr-solrj</artifactId> <version>7.7.2</version> </dependency> </dependencies>
1.新增/修改实现
String url = "http://192.168.93.10:8983/solr/testcore"; HttpSolrClient solrClient = new HttpSolrClient.Builder(url).build(); SolrInputDocument inputDocument = new SolrInputDocument(); inputDocument.addField("id","3"); inputDocument.addField("myfield","myfield3"); solrClient.add(inputDocument); solrClient.commit();
2.删除实现
String url = "http://192.168.93.10:8983/solr/testcore"; HttpSolrClient solrClient = new HttpSolrClient.Builder(url).build(); solrClient.deleteById("3"); solrClient.commit();
3.查询实现
public void testQuery(){ try { String url = "http://192.168.93.10:8983/solr/testcore"; HttpSolrClient solrClient = new HttpSolrClient.Builder(url).build(); //封装了所有查询条件 SolrQuery params = new SolrQuery(); params.setQuery("name:丰富的"); //排序 params.setSort("price", SolrQuery.ORDER.desc); //分页 params.setStart(0); params.setRows(1); //高亮 params.setHighlight(true); params.addHighlightField("name"); params.setHighlightSimplePre("<span>"); params.setHighlightSimplePost("</span>"); QueryResponse response = solrClient.query(params); SolrDocumentList list = response.getResults(); System.out.println("总条数:"+list.getNumFound()); //高亮数据 Map<String, Map<String, List<String>>> highlighting = response.getHighlighting(); for(SolrDocument doc :list){ System.out.println(doc.get("id")); Map<String, List<String>> map = highlighting.get(doc.get("id")); List<String> HLList = map.get("name"); if(HLList!=null&&HLList.size()>0){//显示高亮数据 System.out.println(HLList.get(0)); }else{ System.out.println(doc.get("name")); } System.out.println(doc.get("price")); System.out.println("==================="); } solrClient.close(); } catch (SolrServerException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }