1. 异常
今天学习了Elasticsearch , 用spring boot 连接elasticseaerch测试建立索引,测试报错
NoNodeAvailableException 错误。下面项目文件
yml 配置
spring:
data:
elasticsearch:
cluster-name: elasticsearch
cluster-nodes: 192.168.100.206:9300
测试类代码
@SpringBootTest
@RunWith(SpringRunner.class)
public class ElasticsearchTest {
@Autowired
private ElasticsearchTemplate elasticsearchTemplate;
@Test
public void testIndex(){
this.elasticsearchTemplate.createIndex(Item.class);
this.elasticsearchTemplate.putMapping(Item.class);
}
}
Item类
/**
1. @author : 风笛叶
*/
@Document(indexName = "item", type = "docs", shards = 1, replicas = 0)
public class Item {
@Id
Long id;
//标题
@Field(type = FieldType.Text, analyzer = "ik_max_word")
String title;
// 分类
@Field(type = FieldType.Keyword)
String category;
// 品牌,默认会索引
@Field(type = FieldType.Keyword)
String brand;
// 价格
@Field(type = FieldType.Double)
Double price;
// 图片地址
@Field(type = FieldType.Keyword, index = false)
String images;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
public String getImages() {
return images;
}
public void setImages(String images) {
this.images = images;
}
}
2. 解决方案
- 网上说是端口问题,9200是Http访问路口,9300是java连接ES的端口,我的配置是原来就是9300。
- cluster-name属性,要跟9200端口http://IP:9200查出来一样(亲测有效)(
{
"name": "DVzJ4Z0",
"cluster_name": "docker-cluster",
"cluster_uuid": "6mc2IbIMT-Kn_neqr8CmKA",
"version": {
"number": "6.4.0",
"build_flavor": "default",
"build_type": "tar",
"build_hash": "595516e",
"build_date": "2018-08-17T23:18:47.308994Z",
"build_snapshot": false,
"lucene_version": "7.4.0",
"minimum_wire_compatibility_version": "5.6.0",
"minimum_index_compatibility_version": "5.0.0"
},
"tagline": "You Know, for Search"
}
因为我是用docker 搭建的es ,cluster_name是docker_cluster;
而docker跟一般搭建的es的cluster_name是elasticsearch。
把yml 改一下 就可以
spring:
data:
elasticsearch:
cluster-name: docker-cluster #需要与9200查出来的cluster-name一样
cluster-nodes: 192.168.100.206:9300
运行结果