Skip to main content

Query Operations

dbVisitor treats HTTP method + path + JSON as an executable statement. @Query accepts REST commands, not just SELECT. These examples use Elasticsearch 7 typeless requests. Connection setup: JDBC Elasticsearch.

Entity Mapping​

@Table("user_info")
public class UserInfo {
@Column(primary = true)
private String uid;
private String name;
// Getters and setters omitted
}

Index and field name rules are covered under Name Sensitivity.

Exact Matching​

Map uid and name as keyword in the example index:

PUT /user_info {"mappings":{"properties":{"uid":{"type":"keyword"},"name":{"type":"keyword"}}}}

Fluent eq generates a match query. On text fields it may match analyzed terms; use keyword fields and the term request below for exact matching.

Executing Query Commands​

JdbcTemplate jdbc = new JdbcTemplate(dataSource);

List<UserInfo> rows = jdbc.queryForList(
"POST /user_info/_search {\"query\":{\"term\":{\"uid\": ?}}}",
new Object[] { "1001" }, UserInfo.class);

Querying Through Different APIs​

LambdaTemplate lambda = new LambdaTemplate(dataSource);
UserInfo item = lambda.query(UserInfo.class)
.eq(UserInfo::getUid, "1001")
.queryForObject();

Builder queries generate _search requests.

Reading a script calculation​

In ES 6/7, use Painless script_fields in a search request, not a stored-function call. With at least one document in calculation:

String command = """
POST /calculation/_search
{"size": 1, "_source": false, "query": {"match_all": {}},
"script_fields": {"value": {"script": {
"lang": "painless", "source": "params.x + params.y",
"params": {"x": ?, "y": ?}
}}}}
""";
Integer sum = jdbc.queryForObject(command, new Object[] { 10, 5 }, Integer.class);

The calculation runs per search hit. No hit means no calculation row. Positional and named arguments and scalar conversion are supported; JDBC CallableStatement callbacks, OUT-parameter records, and SQL table-function syntax are not. Keep the script fixed and bind values through params.

See Where Builder for collection predicates and explicit null filtering.

Query Execution Options​

Mapper files accept statementType, timeout, and fetchSize; their effect follows the driver settings. For resultSetType, keep DEFAULT or use FORWARD_ONLY. Scrollable result sets (SCROLL_INSENSITIVE and SCROLL_SENSITIVE) are not supported. See Execution Options for XML configuration.

See Result Reading for result columns.