Java solr7.5 spingdata solr笔记,多表,单表查询,Linux安装

由于公司项目用到solr,本文是做一下笔记,版本是windows solr7.5
下载地址
启动:在bin目录下输入 solr start 或者指定端口 solr start -p 端口号

1.创建自己的core,每个核心都是solr的一个实例,一个solr服务可以创建多个核心,每个核心都可以进行自己独立配置。
在这里插入图片描述

在D:\solr\solr-7.5.0\server\solr创建一个叫new_core的文件夹,将configsets中default文件下的config复制导new_core文件夹下
在这里插入图片描述
然后在这样
也可以这样bin目录下输入命令 solr create –c new_core

配置一下中文分词器

在这里插入图片描述
这个放百度云了
将这两个jar放到 D:\solr\solr-7.5.0\server\solr-webapp\webapp\WEB-INF\lib
类外三个文件放到 D:\solr\solr-7.5.0\server\solr-webapp\webapp\WEB-INF\classes

配置一下schema,在new_core文件夹下的managed-schema,版本变更后文件名改了(其实之前的版本我也不知道,我也是现学的)

		<fieldType name="text_ik" class="solr.TextField">
		  <analyzer type="index">
			  <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" conf="ik.conf"/>
			  <filter class="solr.LowerCaseFilterFactory"/>
		  </analyzer>
		  <analyzer type="query">
			  <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" conf="ik.conf"/>
			  <filter class="solr.LowerCaseFilterFactory"/>
		  </analyzer>
		</fieldType>

解释一下
fieldType:为field定义类型,最主要作用是定义分词器,分词器决定着如何从文档中检索关键字。
analyzer:fieldType的子元素,是分词器,由tokenizer和filter组成。例如

配置一下数据库导入数据配置文件的的字段和这个里面的字段一致即可

*不导入数据库数据直接配置字段在这个文件,进行增删改查

field:字段,用来创建索引,如果这个字段需要生成索引,则需要设置的indexed为true,需要存储设置stored属性为true

	<field name="userid" type="string" indexed="true" stored="true"/>
	<field name="username" type="string" indexed="true" stored="true"/>
	<field name="wxlogin" type="string" indexed="true" stored="true"/>
	<field name="qqlogin" type="string" indexed="true" stored="true"/>
	<field name="mobile" type="string" indexed="true" stored="true"/>

Linux 下 配置环境变量
vi /etc/profile
编辑profile文件末尾追加:

   export SOLR_INSTALL_HOME=/usr/solr-7.4.0
   export PATH=$PATH:$SOLR_INSTALL_HOME/bin

执行如下命令使环境变量生效

 source /etc/profile

将/user/local/solr/solr-7.5.0/bin/solr.in.sh文件中,SOLR_ULIMIT_CHECKS设置为false,消除WARN

solr start -c -force 以root用户启动,-p指定端口

Java代码

application.yml

# solr
spring:
  data:
    solr:
      host: http://localhost:8989/solr/new_core
      这里不指明会报错的

实体

			public class BcUser {
			
			    @Id
			    @Field
			    private int id;
			
			    @Field
			    private String userid;
			
			    @Field
			    private String username;
			
			    @Field
			    private String wxlogin;
			
			    @Field
			    private String qqlogin;
			
			    @Field
			    private String mobile;
			
			    public String getUserid() {
			        return userid;
			    }
			
			    public void setUserid(String userid) {
			        this.userid = userid;
			    }
			
			    public String getUsername() {
			        return username;
			    }
			
			    public void setUsername(String username) {
			        this.username = username;
			    }
			
			    public String getWxlogin() {
			        return wxlogin;
			    }
			
			    public void setWxlogin(String wxlogin) {
			        this.wxlogin = wxlogin;
			    }
			
			    public String getQqlogin() {
			        return qqlogin;
			    }
			
			    public void setQqlogin(String qqlogin) {
			        this.qqlogin = qqlogin;
			    }
			
			    public String getMobile() {
			        return mobile;
			    }
			
			    public void setMobile(String mobile) {
			        this.mobile = mobile;
			    }
			
			    public int getId() {
			        return id;
			    }
			
			    public void setId(int id) {
			        this.id = id;
			    }
			
			    @Override
			    public String toString() {
			        return "BcUser{" +
			                "id=" + id +
			                ", userid='" + userid + '\'' +
			                ", username='" + username + '\'' +
			                ", wxlogin='" + wxlogin + '\'' +
			                ", qqlogin='" + qqlogin + '\'' +
			                ", mobile='" + mobile + '\'' +
			                '}';
			    }
			}

测试

package com.zhou.search;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.zhou.search.entity.BcUser;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.solr.core.SolrTemplate;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.List;

@RunWith(SpringRunner.class)
@SpringBootTest
public class SearchApplicationTests {

	@Autowired
	private SolrClient client;


	@Autowired
	private SolrTemplate solrTemplate;


//插入
	@Test
	public void contextLoads() {
		try {
			BcUser bcUser=new BcUser();
			bcUser.setId(4);
			bcUser.setMobile("465456534564");
			bcUser.setQqlogin("156456456454");
			bcUser.setUsername("我的第58个测试text");
			bcUser.setWxlogin("微信登录");
			client.addBean(bcUser);
			client.commit();
		}catch (Exception e){

		}


	}

//根据id去查
	@Test
	public void textfind() throws Exception{
		SolrDocument byId = client.getById("3");

		Gson gson = new Gson();
		// 方法1
		String solrString = gson.toJson(byId);
		BcUser bcUser = gson.fromJson(solrString, BcUser.class);

		System.out.println(bcUser);


		//Optional<BcUser> new_code = solrTemplate.getById("new_code", 10005, BcUser.class);
		System.out.println();
	}

//模糊查
	@Test
	public void findName()throws Exception{
		String name="我";
		SolrQuery params = new SolrQuery();
		params.setQuery("username:*"+name+"*");
		QueryResponse response = client.query(params);
		SolrDocumentList documentList = response.getResults();

		Gson gson = new Gson();
		String listString = gson.toJson(documentList);
		List<BcUser> bcUsers = gson.fromJson(listString, new TypeToken<List<BcUser>>() {
		}.getType());

		System.out.println(bcUsers);
	}

//查所有
	@Test
	public void findList()throws Exception{
		SolrQuery params = new SolrQuery();
		params.setQuery("*:*");

		QueryResponse response = client.query(params);
		SolrDocumentList documentList = response.getResults();

		Gson gson = new Gson();
		String listString = gson.toJson(documentList);
		List<BcUser> bcUsers = gson.fromJson(listString, new TypeToken<List<BcUser>>() {
		}.getType());

		System.out.println(bcUsers);

	}

}

配置多表

先配置数据库连接数据
将solr_home\dist(D:\solr\solr-7.5.0\dist)目录下的solr-dataimporthandler-7.5.0.jar和MySQL驱动(随便找个MySQL驱动)复制到solr_home\server\solr-webapp\webapp\WEB-INF\lib(D:\solr\solr-7.5.0\server\solr-webapp\webapp\WEB-INF\lib)目录下。

在new_core下创建一个叫my-data-config.xml的文件,具体这样写

<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
    <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/app-service"
                user="root" password="123456"/>
    <document>
        <entity name="BcUsers" query="select id,userid,username,wxlogin,qqlogin,mobile from bc_users">
            <field column="id" name="id"/>
            <field column="userid" name="userid"/>
            <field column="username" name="username"/>
            <field column="wxlogin" name="wxlogin"/>
            <field column="qqlogin" name="qqlogin"/>
            <field column="mobile" name="mobile"/>
             <entity name="BcUsersdetail" query="select id,userid,username,wxlogin,qqlogin,mobile from bc_users-detail where user_id='${BcUsers.id}' ">
		            <field column="aa" name="aa"/>
		            <field column="bb" name="bb"/>
		            <field column="bb" name="bb"/>
        </entity>
        </entity>
    </document>
</dataConfig>

注意这些字段要添加到schema那边,直接加上就行了

在这个目录下的solrconfig.xml里面这样写,随便找一个requestHandler,同级下写上这个

<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
		<lst name="defaults">
			<str name="config">my-data-config.xml</str>
		</lst>
	</requestHandler>

重启solr
在这里插入图片描述
再操作一下放大镜就o了

差不多就这样,自己看得懂就行了

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值