创建Core,并对索引进行CRUD操作

修改各种配置文件。

1、修改solrhome下的solr.xml文件

注解掉zookeeper搭建集群配置,我们后面会采用master-slave的形式。

至于zookeeper的形式可以阅读以下这篇文章【solrCloud集群配置指导】:http://www.aboutyun.com/thread-9432-1-1.html

[html]  view plain  copy
  1. <!-- 结合zookeeper配置solrColound start -->  
  2.   <!-- 采用master-slave的方式  
  3.   <solrcloud>  
  4.   
  5.     <str name="host">${host:}</str>  
  6.     <int name="hostPort">${jetty.port:8983}</int>  
  7.     <str name="hostContext">${hostContext:solr}</str>  
  8.   
  9.     <bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>  
  10.   
  11.     <int name="zkClientTimeout">${zkClientTimeout:30000}</int>  
  12.     <int name="distribUpdateSoTimeout">${distribUpdateSoTimeout:600000}</int>  
  13.     <int name="distribUpdateConnTimeout">${distribUpdateConnTimeout:60000}</int>  
  14.   
  15.   </solrcloud>  
  16.   
  17.   <shardHandlerFactory name="shardHandlerFactory"  
  18.     class="HttpShardHandlerFactory">  
  19.     <int name="socketTimeout">${socketTimeout:600000}</int>  
  20.     <int name="connTimeout">${connTimeout:60000}</int>  
  21.   </shardHandlerFactory>  
  22.   -->  
  23. <!-- 结合zookeeper配置solrColound end -->  
2、在sorlhome文件夹下创建【my_solr】文件夹。

3、在【my_solr】文件夹中添加core.properties配置,内容如下:

[html]  view plain  copy
  1. name=my_solr  
这个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中修改如下:

[html]  view plain  copy
  1. <codecFactory class="solr.SchemaCodecFactory"/>  
  2.   <!-- 解除managed-schema管理模式 start -->  
  3.   <schemaFactory class="ClassicIndexSchemaFactory"/>  
  4.   <!-- 解除managed-schema管理模式 end -->  
重启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文件,添加

[html]  view plain  copy
  1. <field name="content_test" type="text_general" indexed="true" stored="true" multiValued="true"/>  
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中如下配置:

[html]  view plain  copy
  1. <!-- Data Directory  
  2.   
  3.        Used to specify an alternate directory to hold all index data  
  4.        other than the default ./data under the Solr home.  If  
  5.        replication is in use, this should match the replication  
  6.        configuration.  
  7.     -->  
  8.   <dataDir>${solr.data.dir:}</dataDir>  
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调用(上述已有示例代码)

相应的高级查询方法,后续如果有时间会继续补充。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值