solr搜索引擎

概述

简介

Solr是一个基于Lucene的Java搜索引擎服务器,Solr 包装并扩展了 Lucene,所以Solr的基本上沿用了Lucene的相关术语。solr解决了sql在查询性能上的问题,比如搜索商品,过多商品通过like关键字甚至加上其他更复杂语句会导致性能问题。

安装

下载

官网下载解压即可

bin:solr的命令文件
contrib:solr的插件
dist: solr的jar包
docs: solr文档
example: solr示例
licenses: solr证书
server: solr服务器核心文件

启动solr

在使用前必须安装JDK,然后shell进入bin目录:输入solr start

打开网页http://localhost:8983/solr访问进入solr页面即安装完成。
其它命令:
solr start –p 端口号 单机版启动solr服务(默认端口号8983)
solr restart –p 端口号 重启solr服务
solr stop –p 端口号关闭solr服务

使用

创建core(核心)

Solr核心(Core)是Lucene索引的运行实例,每个core下都有自己的索引库和与之相应的配置文件。
1.进入bin目录执行solr create –c name即可,core存放在server/solr下,删除core时执行
solr delete -c name。
2.solr的控制面板创建

索引

索引使用户能够在文档中快速地查找信息。我们可以索引(添加,删除,修改)各种文档格式。在查询之前要添加数据。

  • 命令提交:post -c coreName(要提交到的核心) file(要提交的文件,可以提交xml测试)
<add> 
   <doc> 
      <field name = "id">1001</field> 
      <field name = "name">zhangsan</field> 
      <field name = "age">18</field> 
   </doc>  
   <doc> 
      <field name = "id">1002</field> 
      <field name = "name">lisi</field> 
      <field name = "age">20</field> 
    </doc>
   </add>

add:添加文档根节点
doc:文档内容
field:设置名称和值

  • solr控制面板提交:
    在这里插入图片描述
  • 使用java代码提交

配置schema

schema指定了如何建立索引,其配置文件在创建的core下的conf文件夹下,名为managed-schema。

  • field:创建索引用的字段
  • fieldType:为field定义类型,最主要作用是定义分词器,分词器决定着如何从文档中检索关键字。
  • analyzer:分词器,他由一组tokenizer和filter组成
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />

indexed:是否索引,true表示要索引,索引的目的为了搜索。
stored:是否存储,存储的目的是为了从索引文件读取数据
required:设置为true时,当字段没有值,则solr会索引文档失败
type:是指定的fieldType的name
配置中文分词器(IKAnalyzer)下载:https://github.com/magese/ik-analyzer-solr7
jar包下载https://mvnrepository.com/artifact/com.github.magese/ik-analyzer-solr7/7.x
按照github配置即可

solr导入mysql数据

  • 数据库建表
  • 复制dist文件夹下的solr-dataimporthandler-7.6.0.jar和solr-dataimporthandler-extras-7.6.0.jar到
    E:\solr-7.6.0\server\solr-webapp\webapp\WEB-INF\lib下。
  • 在所在核心下的conf文件夹下新建data_config.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<dataConfig>
    <!-- 数据源 -->
    <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/solr"
                user="root" password="123456"/>
    <document>
	     <!-- 查询实体 -->
        <entity name="user" query="select * from user" deltaQuery="select * from user">
		     <!-- 字段 -->
		     <field name="id" column="id"/>
            <field name="name" column="name"/>
            <field name="age" column="age"/>
        </entity>
    </document>
</dataConfig>
  • 编辑solrconfig.xml加入requestHandler
<requestHandler name="/selectUser" class="org.apache.solr.handler.dataimport.DataImportHandler">
    <lst name="defaults">
      <str name="config">data_config.xml</str>
    </lst>
  </requestHandler>
  • 编辑managed-schema配置field,id已存在无需配置
<field name="name" type="string" indexed="true" stored="true"/>
<field name="age" type="string" indexed="true" stored="true"/>
  • 最后重启solr,进入solr面板导入数据。

solrj的使用

添加maven依赖,版本根据个人需要改变

<dependency>
            <groupId>org.apache.solr</groupId>
            <artifactId>solr-solrj</artifactId>
            <version>7.6.0</version>
        </dependency>  

不使用注解

  • 查询:
    HttpSolrClient solrClient;
    @Before
    public void conn(){
        solrClient=new HttpSolrClient.Builder("http://localhost:8983/solr/coreTest")
                .withConnectionTimeout(6000)
                .withSocketTimeout(4000)
                .build();
    }
    @Test
    public void test() throws IOException, SolrServerException {
        //添加
        SolrInputDocument doc=new SolrInputDocument();
        doc.addField("id",1001);
        doc.addField("name","jack");
        doc.addField("age",15);
        solrClient.add(doc);
        solrClient.commit();
        //删除
        solrClient.deleteById("1001");
        //查询
        SolrQuery solrQuery=new SolrQuery();
        solrClient.commit();
        solrQuery.set("q","id:*");
        QueryResponse query = solrClient.query(solrQuery);
        SolrDocumentList results = query.getResults();
        results.forEach(solrDoc-> {
            User user=new User();
            user.setId(Long.parseLong((String) solrDoc.get("id")));
            user.setName((String) solrDoc.get("name"));
            user.setAge(Integer.parseInt((String) solrDoc.get("age")));
            System.out.println(user.toString());
        });
    }

使用注解@Field

@Data
public class User {
    @Field
    private Long id;
    @Field
    private String name;
    @Field
    private int age;
}

添加文档

HttpSolrClient solrClient=new HttpSolrClient.Builder("http://localhost:8983/solr/coreTest")
                .withConnectionTimeout(6000)
                .withSocketTimeout(4000)
                .build();
User user=new User();
user.setId("1002");
user.setName("tony");
user.setAge(20);
solrClient.addBean(user);
solrClient.commit();
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈大侠在江湖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值