如何使用Jest客户端为Elasticsearch设置自定义字段名?
如何使用Jest客户端为Elasticsearch设置自定义字段名?
其实在Jest客户端里给Elasticsearch设置自定义字段名,和你熟悉的Spring Data ES路子是一样的——因为Jest底层也是靠Jackson来处理Java对象和ES文档之间的序列化/反序列化,所以直接用Jackson的@JsonProperty注解就能指定ES映射里的自定义字段名。
具体步骤与示例:
给实体类添加Jackson注解
在你的Java实体类中,用@JsonProperty("自定义字段名")标记需要映射的属性,这样Jest在序列化/反序列化时就会按照你指定的字段名来处理。示例代码:
import com.fasterxml.jackson.annotation.JsonProperty; public class Product { // 将Java属性id映射到ES中的"product_id"字段 @JsonProperty("product_id") private Long id; // 将Java属性name映射到ES中的"product_name"字段 @JsonProperty("product_name") private String name; // 省略getter、setter、构造方法等 }使用Jest客户端操作ES
当你用Jest客户端将这个实体对象存入ES时,注解指定的自定义字段名就会生效。示例索引文档的代码:
import io.searchbox.client.JestClient; import io.searchbox.client.JestClientFactory; import io.searchbox.client.config.HttpClientConfig; import io.searchbox.core.Index; public class JestFieldMappingExample { public static void main(String[] args) throws Exception { // 初始化Jest客户端 JestClientFactory factory = new JestClientFactory(); factory.setHttpClientConfig(new HttpClientConfig.Builder("http://localhost:9200") .multiThreaded(true) .build()); JestClient client = factory.getObject(); // 创建实体对象 Product product = new Product(); product.setId(1L); product.setName("Elasticsearch实战指南"); // 构建索引请求 Index indexRequest = new Index.Builder(product) .index("product_index") .build(); // 执行索引操作 client.execute(indexRequest); // 关闭客户端资源 client.shutdownClient(); } }验证ES中的文档结构
执行上述代码后,你在ES中查询到的文档会是这样的:{
"_index": "product_index",
"_id": "xxx",
"_source": {
"product_id": 1,
"product_name": "Elasticsearch实战指南"
}
}
可以看到,Java对象的id和name属性已经被映射成了我们指定的product_id和product_name字段。
内容的提问来源于stack exchange,提问作者Arivazhagan L
相关产品推荐
相关产品推荐

