首先,您需要建立一個類來表示您的索引和文檔類型,例如:
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 上下文中。