Skip to content

Commit d0b5006

Browse files
droberts195original-brownbear
authored andcommitted
[HLRC][ML] Add ML find file structure API (#35833)
Relates to #29827
1 parent c17fa7f commit d0b5006

14 files changed

+1786
-0
lines changed

client/rest-high-level/src/main/java/org/elasticsearch/client/MLRequestConverters.java

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import org.elasticsearch.client.ml.DeleteForecastRequest;
3737
import org.elasticsearch.client.ml.DeleteJobRequest;
3838
import org.elasticsearch.client.ml.DeleteModelSnapshotRequest;
39+
import org.elasticsearch.client.ml.FindFileStructureRequest;
3940
import org.elasticsearch.client.ml.FlushJobRequest;
4041
import org.elasticsearch.client.ml.ForecastJobRequest;
4142
import org.elasticsearch.client.ml.GetBucketsRequest;
@@ -70,6 +71,7 @@
7071
import org.elasticsearch.client.ml.job.util.PageParams;
7172
import org.elasticsearch.common.Strings;
7273
import org.elasticsearch.common.bytes.BytesReference;
74+
import org.elasticsearch.common.xcontent.XContentType;
7375

7476
import java.io.IOException;
7577

@@ -648,4 +650,65 @@ static Request deleteFilter(DeleteFilterRequest deleteFilterRequest) {
648650
Request request = new Request(HttpDelete.METHOD_NAME, endpoint);
649651
return request;
650652
}
653+
654+
static Request findFileStructure(FindFileStructureRequest findFileStructureRequest) {
655+
String endpoint = new EndpointBuilder()
656+
.addPathPartAsIs("_xpack")
657+
.addPathPartAsIs("ml")
658+
.addPathPartAsIs("find_file_structure")
659+
.build();
660+
Request request = new Request(HttpPost.METHOD_NAME, endpoint);
661+
662+
RequestConverters.Params params = new RequestConverters.Params(request);
663+
if (findFileStructureRequest.getLinesToSample() != null) {
664+
params.putParam(FindFileStructureRequest.LINES_TO_SAMPLE.getPreferredName(),
665+
findFileStructureRequest.getLinesToSample().toString());
666+
}
667+
if (findFileStructureRequest.getTimeout() != null) {
668+
params.putParam(FindFileStructureRequest.TIMEOUT.getPreferredName(), findFileStructureRequest.getTimeout().toString());
669+
}
670+
if (findFileStructureRequest.getCharset() != null) {
671+
params.putParam(FindFileStructureRequest.CHARSET.getPreferredName(), findFileStructureRequest.getCharset());
672+
}
673+
if (findFileStructureRequest.getFormat() != null) {
674+
params.putParam(FindFileStructureRequest.FORMAT.getPreferredName(), findFileStructureRequest.getFormat().toString());
675+
}
676+
if (findFileStructureRequest.getColumnNames() != null) {
677+
params.putParam(FindFileStructureRequest.COLUMN_NAMES.getPreferredName(),
678+
Strings.collectionToCommaDelimitedString(findFileStructureRequest.getColumnNames()));
679+
}
680+
if (findFileStructureRequest.getHasHeaderRow() != null) {
681+
params.putParam(FindFileStructureRequest.HAS_HEADER_ROW.getPreferredName(),
682+
findFileStructureRequest.getHasHeaderRow().toString());
683+
}
684+
if (findFileStructureRequest.getDelimiter() != null) {
685+
params.putParam(FindFileStructureRequest.DELIMITER.getPreferredName(),
686+
findFileStructureRequest.getDelimiter().toString());
687+
}
688+
if (findFileStructureRequest.getQuote() != null) {
689+
params.putParam(FindFileStructureRequest.QUOTE.getPreferredName(), findFileStructureRequest.getQuote().toString());
690+
}
691+
if (findFileStructureRequest.getShouldTrimFields() != null) {
692+
params.putParam(FindFileStructureRequest.SHOULD_TRIM_FIELDS.getPreferredName(),
693+
findFileStructureRequest.getShouldTrimFields().toString());
694+
}
695+
if (findFileStructureRequest.getGrokPattern() != null) {
696+
params.putParam(FindFileStructureRequest.GROK_PATTERN.getPreferredName(), findFileStructureRequest.getGrokPattern());
697+
}
698+
if (findFileStructureRequest.getTimestampFormat() != null) {
699+
params.putParam(FindFileStructureRequest.TIMESTAMP_FORMAT.getPreferredName(), findFileStructureRequest.getTimestampFormat());
700+
}
701+
if (findFileStructureRequest.getTimestampField() != null) {
702+
params.putParam(FindFileStructureRequest.TIMESTAMP_FIELD.getPreferredName(), findFileStructureRequest.getTimestampField());
703+
}
704+
if (findFileStructureRequest.getExplain() != null) {
705+
params.putParam(FindFileStructureRequest.EXPLAIN.getPreferredName(), findFileStructureRequest.getExplain().toString());
706+
}
707+
708+
BytesReference sample = findFileStructureRequest.getSample();
709+
BytesRef source = sample.toBytesRef();
710+
HttpEntity byteEntity = new ByteArrayEntity(source.bytes, source.offset, source.length, createContentType(XContentType.JSON));
711+
request.setEntity(byteEntity);
712+
return request;
713+
}
651714
}

client/rest-high-level/src/main/java/org/elasticsearch/client/MachineLearningClient.java

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@
3131
import org.elasticsearch.client.ml.DeleteJobRequest;
3232
import org.elasticsearch.client.ml.DeleteJobResponse;
3333
import org.elasticsearch.client.ml.DeleteModelSnapshotRequest;
34+
import org.elasticsearch.client.ml.FindFileStructureRequest;
35+
import org.elasticsearch.client.ml.FindFileStructureResponse;
3436
import org.elasticsearch.client.ml.FlushJobRequest;
3537
import org.elasticsearch.client.ml.FlushJobResponse;
3638
import org.elasticsearch.client.ml.ForecastJobRequest;
@@ -1711,4 +1713,45 @@ public void deleteFilterAsync(DeleteFilterRequest request, RequestOptions option
17111713
listener,
17121714
Collections.emptySet());
17131715
}
1716+
1717+
/**
1718+
* Finds the structure of a file
1719+
* <p>
1720+
* For additional info
1721+
* see <a href="http://www.elastic.co/guide/en/elasticsearch/reference/current/ml-find-file-structure.html">
1722+
* ML Find File Structure documentation</a>
1723+
*
1724+
* @param request The find file structure request
1725+
* @param options Additional request options (e.g. headers), use {@link RequestOptions#DEFAULT} if nothing needs to be customized
1726+
* @return the response containing details of the file structure
1727+
* @throws IOException when there is a serialization issue sending the request or receiving the response
1728+
*/
1729+
public FindFileStructureResponse findFileStructure(FindFileStructureRequest request, RequestOptions options) throws IOException {
1730+
return restHighLevelClient.performRequestAndParseEntity(request,
1731+
MLRequestConverters::findFileStructure,
1732+
options,
1733+
FindFileStructureResponse::fromXContent,
1734+
Collections.emptySet());
1735+
}
1736+
1737+
/**
1738+
* Finds the structure of a file asynchronously and notifies the listener on completion
1739+
* <p>
1740+
* For additional info
1741+
* see <a href="http://www.elastic.co/guide/en/elasticsearch/reference/current/ml-find-file-structure.html">
1742+
* ML Find File Structure documentation</a>
1743+
*
1744+
* @param request The find file structure request
1745+
* @param options Additional request options (e.g. headers), use {@link RequestOptions#DEFAULT} if nothing needs to be customized
1746+
* @param listener Listener to be notified upon request completion
1747+
*/
1748+
public void findFileStructureAsync(FindFileStructureRequest request, RequestOptions options,
1749+
ActionListener<FindFileStructureResponse> listener) {
1750+
restHighLevelClient.performRequestAsyncAndParseEntity(request,
1751+
MLRequestConverters::findFileStructure,
1752+
options,
1753+
FindFileStructureResponse::fromXContent,
1754+
listener,
1755+
Collections.emptySet());
1756+
}
17141757
}

0 commit comments

Comments
 (0)