mirror of
https://github.com/honeymoose/OpenSearch.git
synced 2025-03-31 12:28:51 +00:00
This commit reorganizes the docs to make Java API docs looking more like the REST docs. Also, with 2.0.0, FilterBuilders don't exist anymore but only QueryBuilders. Also, all docs api move now to docs/java-api/docs dir as for REST doc. Remove removed queries/filters ----- * Remove Constant Score Query with filter * Remove Fuzzy Like This (Field) Query (flt and flt_field) * Remove FilterBuilders Move filters to queries ----- * Move And Filter to And Query * Move Bool Filter to Bool Query * Move Exists Filter to Exists Query * Move Geo Bounding Box Filter to Geo Bounding Box Query * Move Geo Distance Filter to Geo Distance Query * Move Geo Distance Range Filter to Geo Distance Range Query * Move Geo Polygon Filter to Geo Polygon Query * Move Geo Shape Filter to Geo Shape Query * Move Has Child Filter by Has Child Query * Move Has Parent Filter by Has Parent Query * Move Ids Filter by Ids Query * Move Limit Filter to Limit Query * Move MatchAll Filter to MatchAll Query * Move Missing Filter to Missing Query * Move Nested Filter to Nested Query * Move Not Filter to Not Query * Move Or Filter to Or Query * Move Range Filter to Range Query * Move Ids Filter to Ids Query * Move Term Filter to Term Query * Move Terms Filter to Terms Query * Move Type Filter to Type Query Add missing queries ----- * Add Common Terms Query * Add Filtered Query * Add Function Score Query * Add Geohash Cell Query * Add Regexp Query * Add Script Query * Add Simple Query String Query * Add Span Containing Query * Add Span Multi Term Query * Add Span Within Query Reorganize the documentation ----- * Organize by full text queries * Organize by term level queries * Organize by compound queries * Organize by joining queries * Organize by geo queries * Organize by specialized queries * Organize by span queries * Move Boosting Query * Move DisMax Query * Move Fuzzy Query * Move Indices Query * Move Match Query * Move Mlt Query * Move Multi Match Query * Move Prefix Query * Move Query String Query * Move Span First Query * Move Span Near Query * Move Span Not Query * Move Span Or Query * Move Span Term Query * Move Template Query * Move Wildcard Query Add some missing pages ---- * Add multi get API * Add indexed-scripts link Also closes #7826 Related to https://github.com/elastic/elasticsearch/pull/11477#issuecomment-114745934
194 lines
5.9 KiB
Plaintext
194 lines
5.9 KiB
Plaintext
[[java-docs-index]]
|
|
=== Index API
|
|
|
|
The index API allows one to index a typed JSON document into a specific
|
|
index and make it searchable.
|
|
|
|
|
|
[[java-docs-index-generate]]
|
|
==== Generate JSON document
|
|
|
|
There are several different ways of generating a JSON document:
|
|
|
|
* Manually (aka do it yourself) using native `byte[]` or as a `String`
|
|
|
|
* Using a `Map` that will be automatically converted to its JSON
|
|
equivalent
|
|
|
|
* Using a third party library to serialize your beans such as
|
|
http://wiki.fasterxml.com/JacksonHome[Jackson]
|
|
|
|
* Using built-in helpers XContentFactory.jsonBuilder()
|
|
|
|
Internally, each type is converted to `byte[]` (so a String is converted
|
|
to a `byte[]`). Therefore, if the object is in this form already, then
|
|
use it. The `jsonBuilder` is highly optimized JSON generator that
|
|
directly constructs a `byte[]`.
|
|
|
|
|
|
[[java-docs-index-generate-diy]]
|
|
===== Do It Yourself
|
|
|
|
Nothing really difficult here but note that you will have to encode
|
|
dates according to the
|
|
{ref}/mapping-date-format.html[Date Format].
|
|
|
|
[source,java]
|
|
--------------------------------------------------
|
|
String json = "{" +
|
|
"\"user\":\"kimchy\"," +
|
|
"\"postDate\":\"2013-01-30\"," +
|
|
"\"message\":\"trying out Elasticsearch\"" +
|
|
"}";
|
|
--------------------------------------------------
|
|
|
|
|
|
[[java-docs-index-generate-using-map]]
|
|
===== Using Map
|
|
|
|
Map is a key:values pair collection. It represents a JSON structure:
|
|
|
|
[source,java]
|
|
--------------------------------------------------
|
|
Map<String, Object> json = new HashMap<String, Object>();
|
|
json.put("user","kimchy");
|
|
json.put("postDate",new Date());
|
|
json.put("message","trying out Elasticsearch");
|
|
--------------------------------------------------
|
|
|
|
|
|
[[java-docs-index-generate-beans]]
|
|
===== Serialize your beans
|
|
|
|
Elasticsearch already uses Jackson but shades it under
|
|
`org.elasticsearch.common.jackson` package. +
|
|
So, you can add your own Jackson version in your `pom.xml` file or in
|
|
your classpath. See http://wiki.fasterxml.com/JacksonDownload[Jackson
|
|
Download Page].
|
|
|
|
For example:
|
|
|
|
[source,xml]
|
|
--------------------------------------------------
|
|
<dependency>
|
|
<groupId>com.fasterxml.jackson.core</groupId>
|
|
<artifactId>jackson-databind</artifactId>
|
|
<version>2.1.3</version>
|
|
</dependency>
|
|
--------------------------------------------------
|
|
|
|
Then, you can start serializing your beans to JSON:
|
|
|
|
[source,java]
|
|
--------------------------------------------------
|
|
import com.fasterxml.jackson.databind.*;
|
|
|
|
// instance a json mapper
|
|
ObjectMapper mapper = new ObjectMapper(); // create once, reuse
|
|
|
|
// generate json
|
|
byte[] json = mapper.writeValueAsBytes(yourbeaninstance);
|
|
--------------------------------------------------
|
|
|
|
|
|
[[java-docs-index-generate-helpers]]
|
|
===== Use Elasticsearch helpers
|
|
|
|
Elasticsearch provides built-in helpers to generate JSON content.
|
|
|
|
[source,java]
|
|
--------------------------------------------------
|
|
import static org.elasticsearch.common.xcontent.XContentFactory.*;
|
|
|
|
XContentBuilder builder = jsonBuilder()
|
|
.startObject()
|
|
.field("user", "kimchy")
|
|
.field("postDate", new Date())
|
|
.field("message", "trying out Elasticsearch")
|
|
.endObject()
|
|
--------------------------------------------------
|
|
|
|
Note that you can also add arrays with `startArray(String)` and
|
|
`endArray()` methods. By the way, the `field` method +
|
|
accepts many object types. You can directly pass numbers, dates and even
|
|
other XContentBuilder objects.
|
|
|
|
If you need to see the generated JSON content, you can use the
|
|
`string()` method.
|
|
|
|
[source,java]
|
|
--------------------------------------------------
|
|
String json = builder.string();
|
|
--------------------------------------------------
|
|
|
|
|
|
[[java-docs-index-doc]]
|
|
==== Index document
|
|
|
|
The following example indexes a JSON document into an index called
|
|
twitter, under a type called tweet, with id valued 1:
|
|
|
|
[source,java]
|
|
--------------------------------------------------
|
|
import static org.elasticsearch.common.xcontent.XContentFactory.*;
|
|
|
|
IndexResponse response = client.prepareIndex("twitter", "tweet", "1")
|
|
.setSource(jsonBuilder()
|
|
.startObject()
|
|
.field("user", "kimchy")
|
|
.field("postDate", new Date())
|
|
.field("message", "trying out Elasticsearch")
|
|
.endObject()
|
|
)
|
|
.get();
|
|
--------------------------------------------------
|
|
|
|
Note that you can also index your documents as JSON String and that you
|
|
don't have to give an ID:
|
|
|
|
[source,java]
|
|
--------------------------------------------------
|
|
String json = "{" +
|
|
"\"user\":\"kimchy\"," +
|
|
"\"postDate\":\"2013-01-30\"," +
|
|
"\"message\":\"trying out Elasticsearch\"" +
|
|
"}";
|
|
|
|
IndexResponse response = client.prepareIndex("twitter", "tweet")
|
|
.setSource(json)
|
|
.get();
|
|
--------------------------------------------------
|
|
|
|
`IndexResponse` object will give you a report:
|
|
|
|
[source,java]
|
|
--------------------------------------------------
|
|
// Index name
|
|
String _index = response.getIndex();
|
|
// Type name
|
|
String _type = response.getType();
|
|
// Document ID (generated or not)
|
|
String _id = response.getId();
|
|
// Version (if it's the first time you index this document, you will get: 1)
|
|
long _version = response.getVersion();
|
|
// isCreated() is true if the document is a new one, false if it has been updated
|
|
boolean created = response.isCreated();
|
|
--------------------------------------------------
|
|
|
|
For more information on the index operation, check out the REST
|
|
{ref}/docs-index_.html[index] docs.
|
|
|
|
|
|
[[java-docs-index-thread]]
|
|
==== Operation Threading
|
|
|
|
The index API allows one to set the threading model the operation will be
|
|
performed when the actual execution of the API is performed on the same
|
|
node (the API is executed on a shard that is allocated on the same
|
|
server).
|
|
|
|
The options are to execute the operation on a different thread, or to
|
|
execute it on the calling thread (note that the API is still asynchronous). By
|
|
default, `operationThreaded` is set to `true` which means the operation
|
|
is executed on a different thread.
|