# Elasticsearch 如何实现索引的伪·命名空间
# 环境说明
* jdk8
* elasticsearch7.4.0
* springboot 2.3.12.RELEASE
* spring-data-elasticsearch 4.0.9.RELEASE
注:本文不做特殊说明的情况下,client1与client2使用相同配置
# 应用场景
在公司内部资源紧张的情况下,多个项目使用同一个`elasticsearch`并且数据互不干扰,实现资源的最大化利用,节约成本
# 集成Elasticsearch
## pom(client1与client2相同)
```text
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.12.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-elasticsearch</artifactId>
<version>4.0.9.RELEASE</version>
</dependency>
</dependencies>
```
## config(client1与client2相同)
```text
@Configuration
public class RestClientConfig extends AbstractElasticsearchConfiguration {
@Bean
@Override
public RestHighLevelClient elasticsearchClient() {
final ClientConfiguration clientConfiguration = ClientConfiguration.builder()
.connectedTo("localhost:9200")
.build();
return RestClients.create(clientConfiguration).rest();
}
}
```
## yml
### client1
```text
spring.data.elasticsearch.client.namespace=client1
server.port=8081
```
### client2
```
spring.data.elasticsearch.client.namespace=client2
server.port=8082
```
## 索引名定义(client1与client2相同)
* 定义变量获取
```text
@Configuration
public class EsConst {
@Value("${spring.data.elasticsearch.client.namespace}")
private String elasticsearchNamespace;
@Bean
public String getElasticsearchNamespace(){
return elasticsearchNamespace;
}
}
```
* 新建User 实体类,指定索引名称为`namespace.user`
```text
@Document(indexName = "#{@getElasticsearchNamespace}.user")
public class User {
@Field(type = FieldType.Text)
private String id;
@Field(type = FieldType.Text)
private String name;
@Field(type = FieldType.Text)
private String phone;
@Field(type = FieldType.Text)
private String namespace;
// 省略get/set ......
}
```
## 增加测试方法findAll与save
### client1
* Dao
```text
@Repository
public interface UserDao extends CrudRepository<User,String> {
}
```
* Service
```text
@Service
public class TestService {
@Autowired
private UserDao userDao;
public void findAll(){
Iterable<User> all = userDao.findAll();
Iterator<User> iterator = userDao.findAll().iterator();
User next1 = iterator.next();
System.out.println(next1.toString());
}
public void save(){
User user = new User();
user.setId("1");
user.setName("client1");
user.setNamespace("elasticsearch:client1");
user.setPhone("111");
User save = userDao.save(user);
System.out.println(save.toString());
}
}
```
* Test
```text
@RunWith(SpringRunner.class)
@SpringBootTest
public class ClientApplicationTests {
@Autowired
private TestService testService;
@Test
public void findAll(){
testService.findAll();
}
@Test
public void save(){
testService.save();
}
}
```
### client2
* Dao
```text
@Repository
public interface UserDao extends CrudRepository<User,String> {
}
```
* Service
```text
@Service
public class TestService {
@Autowired
private UserDao userDao;
public void findAll(){
Iterable<User> all = userDao.findAll();
Iterator<User> iterator = userDao.findAll().iterator();
User next1 = iterator.next();
System.out.println(next1.toString());
}
public void save(){
User user = new User();
user.setId("2");
user.setName("client2");
user.setNamespace("elasticsearch:client2");
user.setPhone("222");
User save = userDao.save(user);
System.out.println(save.toString());
}
}
```
* Test
```text
@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoApplicationTests {
@Autowired
private TestService testService;
@Test
public void findAll(){
testService.findAll();
}
@Test
public void save(){
testService.save();
}
}
```
# 测试验证
* 预期结果
* 生成client1.user与client2.user索引
* 访问8081返回client1用户信息,访问8082返回client2用户信息
* 实际结果
![image-20220408212339570](https://s2.loli.net/2022/04/08/xcwEirGK51YmQCS.png)
![image-20220408212429636](https://s2.loli.net/2022/04/08/9hV8zyrPIfGcQAp.png)
![image-20220408212455049](https://s2.loli.net/2022/04/08/152SgYdPmIXGRly.png)
# 总结
我们通过增加一个配置类来获取自定义的`namespace`,然后在类指定索引名时通过获取变量的形式去读取,这样生成的索引就会带一个前缀,也就是我们想要的`namespace·`,也就实现了我们最初的目标,复用同一个`elasticsearch`,达到节省服务器资源的目的
# 参考链接
[SpringDataElasticsearch](https://docs.spring.io/spring-data/elasticsearch/docs/4.2.10/reference/html/#elasticsearch.clients.rest)
没有合适的资源?快使用搜索试试~ 我知道了~
elasticsearch-demo
共144个文件
java:16个
sample:11个
xml:10个
需积分: 5 0 下载量 59 浏览量
2022-04-08
21:33:25
上传
评论
收藏 271KB ZIP 举报
温馨提示
验证不同项目使用同一个版本elasticsearch,增加namespace区分索引。 elasticsearch版本7.4.0,springboot 2.3.12
资源详情
资源评论
资源推荐
收起资源包目录
elasticsearch-demo (144个子文件)
011c496d06f2b774d696c722e06ef24ef01ffa 66B
0320acd31c5dc443a0177814898fc46eac7358 48B
03ccbb7812b5e26e45c82c79cca573b668c83a 330B
08993bf5e8ffce475de4ea421740b0bd46c369 174B
120badbc243ad2b46bd97cf28f0175775f5a41 415B
1d8e79a284a8c8c9c0e36dad3eb3bee3408724 49B
1f63a40995698564efc83a5ee40fdb4562867f 3KB
23766bb88a94fadf1b457b17bb31faa5b890da 418B
25796ea17c5afe56199f829e7c1c2a4c933953 556B
2584f990e305e762d6d822c77dbd94ea31c7e4 152B
267d96bc431a3e5555a2d8ac3843591eb522fe 333B
27ab398eaad8badc66bb8b88e29ab64b206d18 2KB
2a09f092f4700be10d1e59b3b87ab5c2ff9c25 47B
2cc2f82d376e9de42dbfe582d933765e0e252c 66B
2e8117f22c105ade9bbeaefce9e4517cffd295 64B
3976639830b6ceda2ee8c318723054f9179289 46B
3a056d03b073b8c2bc016ad3e2dac926f6e36e 239B
3bf92e4b14377dd7b092b7bb87478ce37a2486 49B
3e37c459676d0b4751efae1bd062cd7cc032f3 343B
3e565c014bca4e157f74789505d686d7750dea 60B
432d60e7a110b33aae0a9b350867bc04bce294 80B
471215ffa49bb600f08f4e59a4a6068c27e486 70B
4903d1a350623c9d392200c57e5d7239021295 521B
49d88e22c06d06802652af26945f099bd388f0 72B
4e8000a5e793efcd11b140b734ce42da04ddc4 78B
5ab5484b0c0ee00e75ef739c7f9d6096d3f852 120B
5b872d99979e11334b60c75973c2ef3eb742b1 54B
5dc8246395a0395c9c0cf888a5dcd9c682262e 260B
65ae86962f7f28d77fada610d4591e7ce1db9f 74B
666482b0a2600d35fa81efc565fb2bd8c78751 521B
698857ec186462660eca7f5b67bea972a46773 61B
6990ad7b571287fe52a1728a5db9bfb307c848 144B
6aabf96bd11788fefb4f047f756e18d7e5a1ea 381B
6bead81f6bb6ce21e33f0841c8d3646b742b3b 63B
6e0a4fd40437a55dfb7697dcabb416da144cfc 46B
702eac64b07d20c32dc23f9c4930ce569f0685 2KB
71cdeb8488a032aeb95f09a2b9f307b32d4a99 78B
7256ff97f2011533d63f63e4d815a2ae937da2 67B
73f759e1d2bbf669f5c2e4856bdbd34dc1a39c 64B
7918002902c6ac89713561d21cf6a584a7f43d 46B
79fc21255251853b875cd14b5cc817e5c07dd0 476B
7d12c4a07032a6ea2b45e8527359e711671553 46B
7fc6b20b9d30bcddaf9b018c9e107d34ae0d66 49B
811c27f0a10cfe4741dbf341265c2d7b0b207e 45B
886ff6f75da6938c75f8bea871953da9ca24cd 45B
8ab018eaf11d9b3a4a90e7818ace373dfbb380 3KB
8f7aac9a26b6aeda1dda91fc13d15a560b06fc 57B
8fb2282df5b8f7263470a5a2dc0e196f35f35f 4KB
90ca4eedcc9c134c09cc84505f90a618093bab 45B
92d8b2cb027db1d676face1cbf522e9d7e9c3a 247B
944bf66e560911d27a21747b32cb58b778655e 206B
97f1ec05b209e6e6dbfc412ba051c652ead62f 79B
988c95e36d80021576e1f434445222abc52839 3KB
9d17e7cbc9fdcb258e25d3baaf56efcf64eeca 46B
9e00a2a96fa9d7c5dbc9859664a78d980158c2 249B
9e60190872c70d030a0d426dbd4a4ec561e707 57B
9effcfb4ebefb00915a5de82f0a09f3d7add1b 188B
ad4fefe1d5177d3d271c58d6a0f14744e41feb 298B
b207de9b325087c8120f82b9abc71d59d541ad 239B
b538a17c85e17dd488f17c9cffb3d629f84013 185B
b8d7752145c1a669ee02960fc8ce2805072f05 478B
bf77645ca618b5a1bee4c17c425444075a1d51 57B
c2ec194a041c232e6250cf3eccd48b4a486b2f 47B
c3e2fd22e229f7c5e7bfea4bf31ae04eec62d7 305B
cb93e7050f42ff587aefbc40cc038ad4fa3271 128B
ccc9d46850b68a0d651c95a655603a234516eb 593B
cea04bfed3d7efff1fe2597a6d514b1d0cb493 57B
cfe2ff51b4414e39a59e9975d30bc45753fe11 95B
mvnw.cmd 7KB
mvnw.cmd 7KB
COMMIT_EDITMSG 5B
config 306B
d18ce4ebc6e4a29bf1a2066717886aa9eca73c 53B
dbd150a7629bfe6f356fe06b8d87065d9774e9 254B
dc5c250f6e21b56a054bb42f610db083f60667 314B
dc80fc67f279066d68f38d49b2cd554c0a23fd 244B
dd12f17644411d6e840bd5a10c6ecda0175f18 51KB
description 73B
ee6064bf74b9b61d3b3e042df11dc4a65efa11 261B
exclude 240B
f0bc863cd41b5b15e679fe5427ea094649292a 343B
f16a47c55547cf48d4dfddbbc976d1e6a8697f 50B
f2acd1e08e4ed410fa49740ddc7caa1621ac28 67B
f8a7d8ffc9b3d1b30b2805f689240de66e1a39 189B
fca4a1ad7c9be2446637fdd74aa471a22d5e1c 75B
.gitignore 395B
.gitignore 395B
HEAD 504B
HEAD 21B
client2.iml 80B
index 5KB
maven-wrapper.jar 57KB
maven-wrapper.jar 57KB
User.java 1KB
User.java 1KB
TestService.java 980B
TestService.java 979B
RestClientConfig.java 967B
RestClientConfig.java 967B
TestController.java 682B
共 144 条
- 1
- 2
醉鱼!
- 粉丝: 115
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0