创建Core,并对索引进行CRUD操作
来源:互联网 发布:java中cgi 编辑:程序博客网 时间:2024/06/06 15:23
修改各种配置文件。
1、修改solrhome下的solr.xml文件
注解掉zookeeper搭建集群配置,我们后面会采用master-slave的形式。
至于zookeeper的形式可以阅读以下这篇文章【solrCloud集群配置指导】:http://www.aboutyun.com/thread-9432-1-1.html
2、在sorlhome文件夹下创建【my_solr】文件夹。3、在【my_solr】文件夹中添加core.properties配置,内容如下:
这个name的值实际上就core的名称,可以任意命名,为了保证统一和方便阅读,个人觉得最好和文件夹名称一致。4、将【solr-6.0.0\example\example-DIH\solr\solr】下的conf文件夹拷贝到【my_solr】文件夹下。包含如下文件:
【conf】中文件目录如下:
5、solr-5.0 以上默认对schema的管理是使用managed-schema,不能手动修改,需要使用Schema Restful的API操作。
如果要想手动修改配置,把【conf】文件夹中managed-schema拷贝一份修改为schema.xml,在solrconfig.xml中修改如下:
重启tomcat8,可能会报错,查看tomcat日志发现,比喻:
缺少DataImportHandler的jar等,那么将【solr-6.0.0\dist】下的solr-dataimporthandler-6.0.0.jar和solr-dataimporthandler-extras-6.0.0.jar
拷贝到【apache-tomcat-8.0.33\webapps\solr\WEB-INF\lib】下。
重启tomcat8。如果缺少其他jar包,根据报错信息添加即可。没有异常,
访问:【http://localhost:8080/solr/index.html#/】
会出现如下界面:
选择my_solr,会出现如下界面:
至此其实由于没有索引数据,其实solr是个空壳,那么下面写一个应用程序插入solr索引数据。
参考:http://www.open-open.com/lib/view/open1452062296995.html
1、首先需要修改schema.xml文件,添加
field的属性和配置,可以google一下schema.xml 说明很多,用法也很多,这里就不赘述。
2、新建测试类
import org.apache.solr.client.solrj.SolrClient;import org.apache.solr.client.solrj.SolrQuery;import org.apache.solr.client.solrj.SolrServerException;import org.apache.solr.client.solrj.impl.HttpSolrClient;import org.apache.solr.client.solrj.response.QueryResponse;import org.apache.solr.common.SolrDocument;import org.apache.solr.common.SolrDocumentList;import org.apache.solr.common.SolrInputDocument;import java.io.IOException;import java.util.ArrayList;import java.util.List;public class MySolr { //solr 服务器地址 public static final String solrServerUrl = "http://localhost:8080/solr"; //solrhome下的core public static final String solrCoreHome = "mySolr"; //待索引、查询字段 public static String[] docs = {"Solr是一个独立的企业级搜索应用服务器", "它对外提供类似于Web-service的API接口", "用户可以通过http请求", "向搜索引擎服务器提交一定格式的XML文件生成索引", "也可以通过Http Get操作提出查找请求", "并得到XML格式的返回结果"}; public static SolrClient getSolrClient(){ return new HttpSolrClient(solrServerUrl+"/"+ solrCoreHome); } /** * 创建索引 */ public static void createIndex() { SolrClient client = getSolrClient(); int i=0; List<SolrInputDocument> solrDocs = new ArrayList<SolrInputDocument>(); for (String content : docs) { SolrInputDocument doc = new SolrInputDocument(); doc.addField("id", i++); doc.addField("content_test", content); solrDocs.add(doc); } try { client.add(solrDocs); client.commit(); } catch (SolrServerException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * 搜索 */ public static void search(){ SolrClient client = getSolrClient(); SolrQuery query = new SolrQuery(); query.setQuery("content_test:搜索"); query.setSort("id", SolrQuery.ORDER.asc); QueryResponse response = null; try { response = client.query(query); System.out.println(response.toString()); System.out.println(); SolrDocumentList docs = response.getResults(); System.out.println("文档个数:" + docs.getNumFound()); System.out.println("查询时间:" + response.getQTime()); for (SolrDocument doc : docs) { System.out.println("id: " + doc.getFieldValue("id") + " content: " + doc.getFieldValue("content_test")); } } catch (SolrServerException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * 更新索引(通过新增一条ID字段已存在,其他字段变化的索引实现更新) */ public static void updateIndex() { SolrClient client = getSolrClient(); int id=3; String content="向搜索引擎服务器提交一定格式的XML文件生成索引(此索引更新了)"; SolrInputDocument doc = new SolrInputDocument(); doc.addField("id", id); doc.addField("content_test", content); try { client.add(doc); client.commit(); } catch (SolrServerException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * 删除索引 */ public static void deleteIndex() { SolrClient client = getSolrClient(); try { client.deleteById("7"); client.commit(); } catch (SolrServerException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { //createIndex(); search(); //updateIndex(); //deleteIndex(); }}
3、运行成功后,会在【solrhome/my_solr】文件夹下创建一个【data】的文件夹,这个文件夹中的内容就是我们的solr索引。
其实其对于的是solconfig.xml中如下配置:
4、访问http://localhost:8080/solr/index.html选择【my_solr】core,选择query得到如下界面:
红色区域是针对不同的ui,因为浏览器版本问题,我这里面选择使用【Use original UI】,会跳转到http://localhost:8080/solr/old.html#/
选择【my_solr】core,选择query,点击【Execute Query】查询结果如下:
其实其访问的url实际为:http://localhost:8080/solr/my_solr/select?q=*%3A*&wt=json&indent=true
至于q、wt、indent等参数,代表的含义,可以搜索solr查询语法。
那么至此,我们就将solr插件完毕,结合了core和创建索引、查询程序,完成!
5、与数据库整合:
我们通常查询的数据都是在数据库(或缓存数据库),这里以mysql作为示例。
1,进入my_solr/conf目录中,找到 solrconfig.xml 配置文件,打开,在其中增加如下代码
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"><lst name="defaults"> <str name="config">data-config.xml</str></lst></requestHandler>
这个是用来配置导入数据的配置文件
2,增加完后,再在同级目录增加 data-config.xml 文件,文件内容如下
<?xml version="1.0" encoding="UTF-8"?><dataConfig><dataSource type="demoDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/demo" user="root" password="" batchSize="-1" /> <document> <entity name="t_user" pk="id" query="SELECT * FROM t_user"> <field column="username" name="username" /> </entity> </document></dataConfig>
其中配置的字段请填写自己数据库的相应配置。
3,然后打开 schema.xml ,在其中增加如下代码
<field name="username" type="string" indexed="true" stored="true" required="true" multiValued="true" />
这里的username和上面的username对应,用作查询使用。
4,打开solr管理后台 http://localhost:8080/solr/#/mysolr ,点击左侧菜单“Dataimport“,默认勾选项即可,点击”Excute“按钮,这时会按照刚才的配置导入相应的数据到solr中,执行完成后会出现如下截图(执行时间可能会比想象的要长一点)
以上,我们就将mysql和solr关联了起来。接下来,我们可以点击左侧菜单”Query“,在”q“所在的对话框下,输入对应的搜索关键词,例如:username:张三,然后点击”Excute Query“按钮,就可以在右侧看到查询结果
那么怎么在java中调用,得到自己要的查询结果呢?
现在我知道的是两种方法:
1,使用http访问,返回对应的json数据
2,使用SolrQuery调用(上述已有示例代码)
相应的高级查询方法,后续如果有时间会继续补充。
- 创建Core,并对索引进行CRUD操作
- jaxp对xml文档进行dom解析并进行CRUD操作
- Android中对数据库进行CRUD操作
- hibernate对数据库进行CRUD操作
- 使用MyBatis对标进行CRUD操作
- 03-如何对Memchached进行CRUD操作?
- 自定义类封装数组,并对数组进行CRUD操作;有序数组的实习与查找
- 用Jaxp包中的DOM技术对XML文件进行解析并完成对文件的CRUD操作
- Java创建一个文本文件,并对其进行读写操作
- 创建数据库并对数据库数据进行操作
- 对数据库进行CRUD
- 使用JDBC对数据库进行CRUD的操作
- 使用Java API对HBase进行CRUD操作
- MyBatis(二)--对MySQL数据表进行CRUD操作
- 用 Java 对 hbase 进行CRUD增删改查操作
- 用 Java 对 hbase 进行CRUD增删改查操作
- hibernate 逆向工程对数据库进行CRUD操作
- (1).Mybatis简单入门:对数据库进行CRUD操作
- windows下seafile fsck工具使用方法
- [来源未知][Dp]permut
- 打开properties乱码 乱码解决方案 jeesite.properties乱码 Properties Editor
- linux的ls命令详解(一)
- 使用Spring Mail API发送邮件
- 创建Core,并对索引进行CRUD操作
- GET和POST的区别
- 【JavaScript 基础】06 对象
- Android高德地图导航or语音播报
- Python 惰性计算
- AssetBundle5.0 打包,下载到本地,加载
- Android 一个灵活的图片 Gridview 布局
- SAP ERP接口解决方案实践
- 设计模式的应用场景(3)--创建者模式