Add analyze API to high-level rest client#31577
Add analyze API to high-level rest client#31577romseygeek merged 19 commits intoelastic:masterfrom romseygeek:analyze-hlrest
Conversation
|
Pinging @elastic/es-core-infra |
nik9000
left a comment
There was a problem hiding this comment.
I think DetailedAnayzeResponse deserves some more testing, as does the request's to and from xcontent stuff.
|
|
||
| Request request = RequestConverters.analyze(indexAnalyzeRequest); | ||
| assertThat(request.getEndpoint(), equalTo("/test_index/_analyze")); | ||
| assertThat(request.getEntity(), notNullValue()); |
There was a problem hiding this comment.
I think other folks are using assertToXContentBody(validateQueryRequest, request.getEntity());. Might be worth leaving a comment about why you aren't using it so no one gets confused.
| { | ||
| // tag::analyze-index-normalizer-request | ||
| AnalyzeRequest request = new AnalyzeRequest(); | ||
| request.index("my_index"); // <1> |
| private String normalizer; | ||
|
|
||
| public static class NameOrDefinition implements Writeable { | ||
| public static class NameOrDefinition implements Writeable, ToXContentObject { |
There was a problem hiding this comment.
You want ToXContentFragment, not ToXContentObject, I think.
| @Override | ||
| public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException { | ||
| if (Strings.isNullOrEmpty(name) == false) { | ||
| return builder.value(name); |
There was a problem hiding this comment.
This looks like it is missing the name.
| attributes.put(field, parser.text()); | ||
| } | ||
| } | ||
| return new AnalyzeToken(term, position, startOffset, endOffset, positionLength, type, attributes); |
There was a problem hiding this comment.
I think ConstructingObjectParser or ObjectParser would be better here because they make it easier to be sure that the error handling is good.
There was a problem hiding this comment.
The tricky part here is that the response can contain arbitrary attributes, which are collected up into a Map and passed to the constructor. Is there a way of handling that within the ConstructingObjectParser?
There was a problem hiding this comment.
No. We honestly need one because it keeps coming up....
| return builder; | ||
| } | ||
|
|
||
| public static AnalyzeResponse fromXContent(XContentParser parser) throws IOException { |
There was a problem hiding this comment.
I think the same thing is true here too.
| AnalyzeTokenList tokenizer = null; | ||
| AnalyzeTokenList[] tokenfilters = null; | ||
| for (XContentParser.Token token = parser.nextToken(); token != XContentParser.Token.END_OBJECT; token = parser.nextToken()) { | ||
| if (token == XContentParser.Token.FIELD_NAME) { |
| public class AnalyzeResponseTests extends AbstractStreamableXContentTestCase<AnalyzeResponse> { | ||
|
|
||
| @Override | ||
| protected boolean supportsUnknownFields() { |
There was a problem hiding this comment.
I general we want our response parsers to support unknown fields unless we can't for some reason. I think getRandomFieldsExcludeFilter is the right thing to do if parts of the response can't handle random fields.
|
retest this please |
|
Thanks for the review @nik9000 , I think I've addressed all of your comments now. |
nik9000
left a comment
There was a problem hiding this comment.
The java stuff LGTM. The docs build seems to fail with this change though.
| else if (Fields.POSITION_LENGTH.equals(field)) { | ||
| positionLength = parser.intValue(); | ||
| } | ||
| else if (Fields.TYPE.equals(field)) { |
There was a problem hiding this comment.
We usually stick else on the same line as }. We don't really have a standard though so if you have a strong opinion keeping it like this is fine.
| return result; | ||
| } | ||
|
|
||
| private boolean customAnalyzer = false; |
There was a problem hiding this comment.
Could you move the members above the ctor so I don't keep losing them when I try to read this class?
| include-tagged::{doc-tests}/IndicesClientDocumentationIT.java[analyze-field-request] | ||
| --------------------------------------------------- | ||
|
|
||
| ==== Optional arguemnts |
There was a problem hiding this comment.
argh, well spotted. Am I alright to directly commit a fix, or should I open another PR?
There was a problem hiding this comment.
I am fine with pushing this fix directly
| String index = request.index(); | ||
| if (index != null) { | ||
| builder.addPathPart(index); | ||
| } |
There was a problem hiding this comment.
question: I see in the REST spec that we have also prefer_local and format. I don't see them supported in the corresponding REST action though. Can you double check? Maybe those params should be removed from the SPEC?
There was a problem hiding this comment.
prefer_local was removed by commit cafc707 and I don't think format has ever been supported. I'll open a new PR to change the rest-spec, and include the typo fix in that one too
* 6.x: Fix not waiting for Netty ThreadDeathWatcher in IT (#31758) (#31789) [Docs] Correct default window_size (#31582) S3 fixture should report 404 on unknown bucket (#31782) [ML] Limit ML filter items to 10K (#31731) Fixture for Minio testing (#31688) [ML] Return statistics about forecasts as part of the jobsstats and usage API (#31647) [DOCS] Add missing get mappings docs to HLRC (#31765) [DOCS] Starting Elasticsearch (#31701) Fix coerce validation_method in GeoBoundingBoxQueryBuilder (#31747) Painless: Complete Removal of Painless Type (#31699) Consolidate watcher setting update registration (#31762) [DOCS] Adds empty 6.3.1 release notes page ingest: Introduction of a bytes processor (#31733) [test] don't run bats tests for suse boxes (#31749) Add analyze API to high-level rest client (#31577) Implemented XContent serialisation for GetIndexResponse (#31675) [DOCS] Typos DOC: Add examples to the SQL docs (#31633) Add support for AWS session tokens (#30414) Watcher: Reenable start/stop yaml tests (#31754) JDBC: Fix stackoverflow on getObject and timestamp conversion (#31735) Support multiple system store types (#31650) Add write*Blob option to replace existing blob (#31729) Split CircuitBreaker-related tests (#31659) Painless: Add Context Docs (#31190) Docs: Remove missing reference Migrate scripted metric aggregation scripts to ScriptContext design (#30111) Watcher: Fix chain input toXcontent serialization (#31721) Remove _all example (#31711) rest-high-level: added get cluster settings (#31706) Docs: Match the examples in the description (#31710) [Docs] Correct typos (#31720) Extend allowed characters for grok field names (#21745) (#31653) (#31722) [DOCS] Check for Windows and *nix file paths (#31648) [ML] Validate ML filter_id (#31535) Fix gradle4.8 deprecation warnings (#31654) Update numbers to reflect 4-byte UTF-8-encoded characters (#27083)
* master: [ML] Rate limit established model memory updates (#31768) [Docs] Correct default window_size (#31582) S3 fixture should report 404 on unknown bucket (#31782) Detach Transport from TransportService (#31727) [ML] Limit ML filter items to 10K (#31731) [ML] Return statistics about forecasts as part of the jobsstats and usage API (#31647) Fixture for Minio testing (#31688) [DOCS] Add missing get mappings docs to HLRC (#31765) [DOCS] Starting Elasticsearch (#31701) Painless: Complete Removal of Painless Type (#31699) Fix not waiting for Netty ThreadDeathWatcher in IT (#31758) Consolidate watcher setting update registration (#31762) Build: re-enabled bwc (#31769) ingest: Introduction of a bytes processor (#31733) Fix coerce validation_method in GeoBoundingBoxQueryBuilder (#31747) Add analyze API to high-level rest client (#31577) [DOCS] Typos DOC: Add examples to the SQL docs (#31633) Add support for AWS session tokens (#30414) Watcher: Reenable start/stop yaml tests (#31754) Implemented XContent serialisation for GetIndexResponse (#31675) JDBC: Fix stackoverflow on getObject and timestamp conversion (#31735) resolveHasher defaults to NOOP (#31723) Account for XContent overhead in in-flight breaker Split CircuitBreaker-related tests (#31659) Add write*Blob option to replace existing blob (#31729) Painless: Add Context Docs (#31190) Watcher: Fix chain input toXcontent serialization (#31721) Docs: Match the examples in the description (#31710) rest-high-level: added get cluster settings (#31706) [Docs] Correct typos (#31720) Clean up double semicolon code typos (#31687) [DOCS] Check for Windows and *nix file paths (#31648) [ML] Validate ML filter_id (#31535) Revert long lines Fix TransportChangePasswordActionTests
Relates to #27205