java - 基于_source字段搜索查询elasticsearch

标签 java elasticsearch search kibana elasticsearch-6

正在使用 _id 从 Elasticsearch 中搜索记录,并且能够从 Elasticsearch 中获取记录。但现在我想使用通配符基于 _source (来自 _source 的任何字段)进行搜索。我不确定如何为此构建我的查询。有这方面的文档吗?

请在下面找到我的代码,我能够根据_id查询 Elasticsearch 。

我使用的是elasticsearch 6.2.3版本。

public Product getProductById(String id){

    String[] includes = new String[]{id};
    String[] excludes = Strings.EMPTY_ARRAY;
    GetRequest getRequest = new GetRequest(INDEX, TYPE, SOURCE);
    getRequest.routing(id);

    GetResponse getResponse = null;
    try {
        getResponse = restHighLevelClient.get(getRequest);
    } catch (java.io.IOException e){
        e.getLocalizedMessage();
    }

    //GetResponse getResponse = null;

    // create the search request
    SearchRequest searchRequest = new SearchRequest(INDEX); 
    searchRequest.types(TYPE);

    // create the match query on the author field
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    MatchQueryBuilder matchQueryBuilder = new MatchQueryBuilder("_id", id); 
    searchSourceBuilder.query(matchQueryBuilder); 
    searchRequest.source(searchSourceBuilder);

    // send the request
    SearchResponse searchResponse = null;
    try {
         searchResponse = restHighLevelClient.search(searchRequest);
    } catch (IOException e) {
        e.getLocalizedMessage();
    }
    // read the response
    String productName = null;
    Product product = null;
    SearchHit[] searchHits = searchResponse.getHits().getHits();
    for (SearchHit hit : searchHits) {
        // get each hit as a Map
        Map<String, Object> sourceAsMap = hit.getSourceAsMap();
        product=new Product();
        product.setName(sourceAsMap.get("name").toString());
    }

    Gson gson=new Gson();
    JSONObject productJSON = null;
    String prodStr=gson.toJson(product);
    try {
        productJSON=new JSONObject(prodStr);
    } catch (JSONException e) { 
        e.printStackTrace();
    }
    return product;
}

请在elasticsearch中找到可用的记录。这里我想根据 _source 字段搜索这条记录。例如:根据 code

进行搜索
{  
   "took":50,
   "timed_out":false,
   "_shards":{  
      "total":5,
      "successful":5,
      "skipped":0,
      "failed":0
},
"hits":{  
  "total":1,
  "max_score":1.0,
  "hits":[  
     {  
        "_index":"my_index",
        "_type":"doc",
        "_id":"MUC8GmMBRU-f7c0A8LUY",
        "_score":1.0,
        "_source":{  
           "@version":"1",
           "vendor_id":1,
           "name":"prod7",
           "code":"abc1234",
           "catalog_id":343,
           "is_visible":1,
           "@timestamp":"2018-05-01T08:06:16.642Z"
        }
     }
  ]
}

最佳答案

只需替换这一行

MatchQueryBuilder matchQueryBuilder = new MatchQueryBuilder("_id", id); 

用这个

MatchQueryBuilder matchQueryBuilder = new MatchQueryBuilder("code", "abc1234"); 

关于java - 基于_source字段搜索查询elasticsearch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50501144/

相关文章:

search - 主机不是Elasticsearch中的公认参数

html - 搜索框不工作

java - 为什么 new java.text.SimpleDateFormat ("EEEE").format(new java.util.Date(2015, 6, 9)) 返回错误的星期几?

sql - Microsoft SQL Server API运行SQL查询以将数据导出到自定义目标

elasticsearch - 使用 X-Pack 写入 Elasticsearch 时出现 Logstash "no such index error"

elasticsearch - 单词字典在Kibana可视化上

java - jax-ws客户端问题

java - Java中的多节点并发

java - 将 TDD 应用于 XML 解析器项目时遇到问题

javascript - 如何使用 Javascript 正则表达式按设定顺序匹配子字符串