elastic java 查询_elasticsearch的java api如何使用查询模板

本文展示了如何在Java中使用Elasticsearch的API进行查询模板操作。通过读取查询模板文件并设置参数,执行搜索请求。然而,遇到问题:`from`、`size`、指定返回字段及高亮设置未生效,仍返回默认结果。
摘要由CSDN通过智能技术生成

这是使用模板进行查询的代码

public class QueryText {

public static void main(String[] args) {

try (Node node = NodeBuilder.nodeBuilder()

.clusterName("net.01")

.client(true).node()) {

//创建elastic客户端

Client client = node.client();

//读取查询模板,然后设置参数查询

try (BufferedReader bodyReader = new BufferedReader(new InputStreamReader(new FileInputStream("D:\\common.template"), "utf8"))) {

String line = null;

StringBuilder strBuffer = new StringBuilder();

while ((line = bodyReader.readLine()) != null) {

strBuffer.append(line);

strBuffer.append("\n");

}

Map search_params = new HashMap<>();

search_params.put("from", 1);

search_params.put("size", 5);

search_params.put("key_words", "opencv sift");

QueryBuilder qb = QueryBuilders.templateQuery(strBuffer.toString(), search_params);

SearchResponse sr;

SearchRequestBuilder srb;

srb = client.prepareSearch("blog_v1")

.setTypes("blogpost")

.setQuery(qb);

sr = srb.get();

for (SearchHit hit : sr.getHits().getHits()) {

System.out.println(hit.getSourceAsString());

}

} catch (UnsupportedEncodingException ex) {

} catch (FileNotFoundException ex) {

} catch (IOException ex) {

}

}

}

}

模板是这个样子的

{

"template": {

"query": {

"function_score": {

"query": {

"multi_match": {

"query": "{{key_words}}",

"type": "best_fields",

"fields": [

"title^3",

"body",

"tag^2",

"category^2"

],

"tie_breaker": 0.3,

"minimum_should_match": "75%"

}

},

"field_value_factor": {

"field": "views",

"modifier": "log1p"

}

}

},

"fields": [

"tag",

"category",

"url"

],

"highlight": {

"pre_tags": [

""

],

"post_tags": [

""

],

"fields": {

"title": {

"fragment_size": 32,

"number_of_fragments": 1

},

"body": {

"fragment_size": 80,

"number_of_fragments": 1

}

}

}

}

}

可是from和size,以及控制返回的Fields和highlight都没有起作用。还是默认的返回最开始10天,还是返回了文档的全文。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值