首先,您需要创建一个类来表示您的索引和文档类型,例如:
public class MyDocument {
private String id;
private String name;
private String description;
// ... other fields and getters/setters
}
接下来,您需要定义一个 ElasticSearch 的 mapping 映射,以告诉 ElasticSearch 如何将 MyDocument 类型的对象映射到文档中。
在本示例中,我们将使用 ElasticSearch 提供的 XContentBuilder 类来定义映射。您可以根据需要添加其他映射属性,例如字段类型、索引选项等等。以下是一个简单的示例:
XContentBuilder builder = XContentFactory.jsonBuilder()
.startObject()
.startObject("properties")
.startObject("id")
.field("type", "keyword")
.endObject()
.startObject("name")
.field("type", "keyword")
.endObject()
.startObject("description")
.field("type", "text")
.field("analyzer", "standard")
.endObject()
.endObject()
.endObject();
在这个示例中,我们使用 XContentFactory 类的 jsonBuilder 方法来创建一个 JSON 对象,然后使用 startObject、endObject、field 等方法来定义映射属性。
接下来,我们可以创建一个公共方法来处理映射。这个方法应该接受一个 String 类型的参数,即我们想要映射的索引名称,然后使用 ElasticSearch 的 Java 客户端 API 来生成映射。
以下是一个示例方法:
@Service
public class MappingService {
@Autowired
private RestHighLevelClient client;
public void createMapping(String indexName) throws IOException {
PutMappingRequest request = new PutMappingRequest(indexName);
request.source(XContentFactory.jsonBuilder()
.startObject()
.startObject("properties")
.startObject("id")
.field("type", "keyword")
.endObject()
.startObject("name")
.field("type", "keyword")
.endObject()
.startObject("description")
.field("type", "text")
.field("analyzer", "standard")
.endObject()
.endObject()
.endObject());
client.indices().putMapping(request, RequestOptions.DEFAULT);
}
}
在这个示例中,我们首先创建了一个 PutMappingRequest 对象,其中包含了要映射的索引名称和映射定义。然后,我们使用 RestHighLevelClient 的 indices().putMapping 方法将请求发送到 ElasticSearch。
请注意,我们在这个示例中注入了一个 RestHighLevelClient 实例,它是 ElasticSearch 官方提供的 Java 客户端 API。您需要在应用程序中配置 RestHighLevelClient 实例,例如:
@Configuration
public class ElasticSearchConfig {
@Value("${elasticsearch.host}")
private String host;
@Value("${elasticsearch.port}")
private int port;
@Value("${elasticsearch.scheme}")
private String scheme;
@Bean
public RestHighLevelClient client() {
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY,
new UsernamePasswordCredentials("username", "password"));
RestClientBuilder builder = RestClient.builder(
new HttpHost(host, port, scheme))
.setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder
.setDefaultCredentialsProvider(credentialsProvider));
RestHighLevelClient client = new RestHighLevelClient(builder);
return client;
}
}
在这个示例中,我们使用 @Value 注解从应用程序配置中获取 ElasticSearch 的主机名、端口和协议类型,并使用 RestClient.builder 方法创建了一个 RestClientBuilder 对象。然后,我们配置了一个 BasicCredentialsProvider,以便在请求时添加用户名和密码。最后,我们创建了一个 RestHighLevelClient 实例,并将其作为 Bean 注册到 Spring 上下文中。