elastic search java api 向量搜索实践 / java结合es实现 以图搜图

准备数据

图片数据

1. FunctionScoreQueryBuilder 方式

代码

//构建脚本查询
Script script = new Script(
        Script.DEFAULT_SCRIPT_TYPE,
        "painless",
        //pic_vector - 搜索字段
        "cosineSimilarity(params.queryVector, doc['pic_vector']) + 1.0",
        new HashMap<String, Object>() {{
            //searchData.getPicVector() - 需要搜索的向量数组,List<Double> 类型
            put("queryVector", searchData.getPicVector());
        }});
ScriptScoreFunctionBuilder scriptScoreFunctionBuilder = ScoreFunctionBuilders.scriptFunction(script);

//构建普通查询
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
// 只查存在的数据
boolQueryBuilder.filter(QueryBuilders.termQuery(FieldGetterUtil.getPropName(searchData::getState), ConstantEnum.ONE.code));
// 查询名称
if (StringUtils.isNotBlank(searchData.getName())) {
    boolQueryBuilder.filter(QueryBuilders.termQuery(FieldGetterUtil.getPropName(searchData::getName), searchData.getName()));
}

// 构建查询请求
SearchRequest searchRequest = new SearchRequest("picture");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
FunctionScoreQueryBuilder functionScoreQueryBuilder = QueryBuilders.functionScoreQuery(boolQueryBuilder, scriptScoreFunctionBuilder);
searchSourceBuilder.query(functionScoreQueryBuilder);
searchRequest.source(searchSourceBuilder);

// 执行搜索
SearchResponse searchResponse = null;
try {
    searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
} catch (IOException e) {
    e.printStackTrace();
}

DSL

GET picture/_search
{
  "query": {
    "function_score": {
      "query": {
        "bool": {
          "filter": [
            {
              "term": {
                "state": {
                  "value": 1,
                  "boost": 1
                }
              }
            }
          ],
          "adjust_pure_negative": true,
          "boost": 1
        }
      },
      "functions": [
        {
          "filter": {
            "match_all": {
              "boost": 1
            }
          },
          "script_score": {
            "script": {
              "source": "cosineSimilarity(params.queryVector, doc['pic_vector']) + 1.0",
              "lang": "painless",
              "params": {
                "queryVector": [
                  数据太长了,先不展示了~
                ]
              }
            }
          }
        }
      ],
      "score_mode": "multiply",
      "max_boost": 3.4028235e+38,
      "boost": 1
    }
  }
}

搜索图片

duck

搜索结果

在这里插入图片描述

2. WrapperQueryBuilder 方式

代码

BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
searchRequest.source().query(boolQueryBuilder);

// 只查存在的数据
boolQueryBuilder.filter(QueryBuilders.termQuery(FieldGetterUtil.getPropName(searchData::getState), ConstantEnum.ONE.code));

// 查询拖名称
if (StringUtils.isNotBlank(searchData.getName())) {
    boolQueryBuilder.filter(QueryBuilders.termQuery(FieldGetterUtil.getPropName(searchData::getName), searchData.getName()));
}

/*
    若包含图片向量,使用 WrapperQueryBuilder 重新构建搜索 DSL 。
    这个方法要在所有条件设置完成之后调用
 */
List<Double> picVector = searchData.getPicVector();
if (CollectionUtil.isNotEmpty(picVector)) {
    buildPicVectorWrapperQueryBuilder(searchData, searchRequest);
}
//执行检索
SearchResponse searchResponse = null;
try {
    searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
} catch (IOException e) {
    e.printStackTrace();
    return ElasticSearchUtil.getEmptyList();
}

/**
 * 构建向量搜索DSL
 *
 * @param searchData
 * @param searchRequest
 */
private void buildPicVectorWrapperQueryBuilder(PictureSearchParam searchData, SearchRequest searchRequest) {
    SearchSourceBuilder source = searchRequest.source();
    source.minScore(searchData.getMinCosScore());
    JSONObject boolQueryDsl = JSONObject.parseObject(source.toString()).getJSONObject("query");
    String fieldName = MapUtils.camelToUnderline(FieldGetterUtil.getPropName(searchData::getPicVector));
    JSONObject queryObject = new JSONObject();
    queryObject.
            put("script_score", new JSONObject() {{
                put("query", boolQueryDsl);
                put("script", new JSONObject() {{
                    put("source", "cosineSimilarity(params." + fieldName + ", doc['" + fieldName + "'])+1.0");
                    put("params", new JSONObject() {{
                        put(fieldName, searchData.getPicVector());
                    }});
                }});
            }});
    WrapperQueryBuilder wrapperQueryBuilder = new WrapperQueryBuilder(JSON.toJSONString(queryObject));
    searchRequest.source().query(wrapperQueryBuilder);
}

DSL

GET picture/_search
{
  "from": 0,
  "size": 10,
  "query": {
    "wrapper": {
      "query": "eyJzY3JpcHRfc2NvcmUiOnsicXVlcnkiOnsiYm9vbCI6eyJmaWx0ZXIiOlt7InRlcm0iOnsic3RhdGUiOnsidmFsdWUiOjEsImJvb3N0IjoxLjB9fX1dLCJhZGp1c3RfcHVyZV9uZWdhdGl2ZSI6dHJ1ZSwiYm9vc3QiOjEuMH19LCJzY3JpcHQiOnsic291cmNlIjoiY29zaW5lU2ltaWxhcml0eShwYXJhbXMucGljX3ZlY3RvciwgZG9jWydwaWNfdmVjdG9yJ10pKzEuMCIsInBhcmFtcyI6eyJwaWNfdmVjdG9yIjpbMS42NDQyMDUyMTI1OTMwNzg2LDEuODg2NTg2NDI3Njg4NTk4NiwxLjc1MjA5NTQ2MDg5MTcyMzYsMS40Njg4NTIxNjIzNjExNDUsMC41MjE1MjQzNjk3MTY2NDQzLDAuNzE2MjgzMDgyOTYyMDM2MSwwLjI0NTcxNzY0NDY5MTQ2NzI5LDEuNDE2MTI3NDQzMzEzNTk4NiwwLjY2NDY2NDc0NTMzMDgxMDUsMS4zNDkwNDg4NTI5MjA1MzIyLDAuNDgxMTQwMjg1NzMwMzYxOTQsMC4yMzc5MjgzNDU3OTk0NDYxLDEuMjQ2OTg5NjA3ODEwOTc0MSwwLjA4NjYyNDk2NTA3MTY3ODE2LDAuNTkyMjI3Mzk5MzQ5MjEyNiwwLjEwMDUyNjYxNTk3NzI4NzI5LDAuMTA0ODk1ODA3ODAyNjc3MTUsMi45NjI2MTY5MjA0NzExOTE0LDAuOTY0NjAzNDI0MDcyMjY1NiwwLjE5MzM5MTc0MDMyMjExMzA0LDAuNjcxNTkwOTI0MjYzMDAwNSwwLjA0OTEzMTkzNzMyNTAwMDc2LDAuMCwwLjQyMzM3NTU3NjczNDU0Mjg1LDAuMDI1ODM0MDE4MzY0NTQ4NjgzLDAuMCwwLjExNzE2MzcxMDI5NjE1NDAyLDAuNjA2NjczNTk4Mjg5NDg5NywwLjAxNDI3NjYyNzQ1MTE4MTQxMiwyLjg4NDM3MzkwMzI3NDUzNiwxLjY0MTIyNDc0MTkzNTczLDEuMjY2NjYwOTI4NzI2MTk2MywwLjI1ODM1NDE1NzIwOTM5NjM2LDEuMTQzOTIwMDYzOTcyNDczMSwxLjQ2MTQ4OTc5NjYzODQ4ODgsMC4xMTI0MDMzODUzNDExNjc0NSwwLjQxNTgwMTEzNzY4NTc3NTc2LDEuMDE3MzYyNDc1Mzk1MjAyNiwwLjU5ODcxNTI0NTcyMzcyNDQsMS4yODI2OTYzNjYzMTAxMTk2LDAuNTAzMjkwNzcyNDM4MDQ5MywxLjA1NzE4NTE3MzAzNDY2OCwwLjU0NzE2MDgwNDI3MTY5OCwwLjA1MjAxOTc1NjI4NzMzNjM1LDAuOTkyNjMyMzg5MDY4NjAzNSwwLjIxNzU4MDc5NTI4ODA4NTk0LDEuNTA4MDc3MTQ0NjIyODAyNywwLjg3MTQxNzE2NDgwMjU1MTMsMS4wNzQzNDY1NDIzNTgzOTg0LDAuMjY2OTMyMDEwNjUwNjM0NzcsMC4wOTkwNjY3NDE3NjQ1NDU0NCwwLjYyOTM5MDY1Njk0ODA4OTYsMS4yODY0Mjg0NTE1MzgwODYsMC4wLDAuMzY2ODI0OTU0NzQ4MTUzNywwLjUzMTE0MTM0MDczMjU3NDUsMC4wNjEzNTEwNDU5NjYxNDgzNzYsMi4yNTAxODUwMTI4MTczODMsMi43ODk4NDkwNDI4OTI0NTYsMC4xNTA3MTY1MTMzOTUzMDk0NSwwLjE0MzQ3MzA3Mzg0MDE0MTMsMC45NTE2MzY0OTMyMDYwMjQyLDAuMTQwNzgyOTIyNTA2MzMyNCwwLjI1Mjg3MDY0OTA5OTM1LDAuMTcwODkxNzc2NjgwOTQ2MzUsMS42NTU1NzM5NjQxMTg5NTc1LDAuMCwwLjAwMTk0OTM5Nzg0NzA1NjM4ODksMS4zMzU4MDI3OTM1MDI4MDc2LDAuMDcyMDQ4MjM5NDA5OTIzNTUsMC4xNjI3NTAxNjk2MzQ4MTkwMywwLjExMjk0ODAwNzg4MTY0MTM5LDAuNTU5NjQ3OTE3NzQ3NDk3NiwyLjgyMjY4MTY2NTQyMDUzMjIsMC4xNDE1Nzg3MzM5MjEwNTEwMywwLjAzNTg1ODg1NDY1MTQ1MTExLDAuOTEzNjIzODA5ODE0NDUzMSwwLjQxNDc4ODc4MjU5NjU4ODEzLDEuMDUwOTAzNjc3OTQwMzY4NywwLjMxMjk5NDgwNzk1ODYwMjksMi4wMDAwNjQ2MTE0MzQ5MzY1LDAuODE1Mzk3MDgzNzU5MzA3OSwxLjMyMzA1NTAyODkxNTQwNTMsMS4xMDk1MDMyNjkxOTU1NTY2LDAuMjg2NzUwNzYzNjU0NzA4ODYsMC4xODY3NTM3MDUxNDM5Mjg1MywwLjI1NzQwOTI3NDU3ODA5NDUsMC40NTEzNTM2NjkxNjY1NjQ5NCwwLjAxNjk4MDEzOTUzODY0NTc0NCwwLjIwNzUzNDQwMjYwODg3MTQ2LDAuNDE4MTQ3MzI1NTE1NzQ3MDcsMC40NTU2OTM3MjE3NzEyNDAyMywwLjMyNDMyMDk0MjE2MzQ2NzQsMi4zNjYzMTcyNzIxODYyNzkzLDAuMzQ4ODUxMjkzMzI1NDI0MiwwLjM5NjExNDgyNjIwMjM5MjYsMS4yODQ3MjgwNTAyMzE5MzM2LDAuNDU5NjA5NDc4NzEyMDgxOSwwLjI5NTUxNDMxNTM2Njc0NSwwLjI3NDUwMTE0NDg4NjAxNjg1LDAuMzk3MTAxMjIzNDY4NzgwNSwwLjA5NzIxMDU1NjI2ODY5MjAyLDEuMDc3NjIwNzQ0NzA1MjAwMiwxLjc4NDE0MDExMDAxNTg2OTEsMS4xMDY3NTQwNjQ1NTk5MzY1LDAuNDc4NDQzMTE1OTQ5NjMwNzQsMC4yMDYyNDI1NDY0MzkxNzA4NCwwLjMxMzEwNjExOTYzMjcyMDk1LDAuNjQ2MTEzOTkxNzM3MzY1NywwLjc1MzgxMDk0MjE3MzAwNDIsMC4zOTU0MDcxMTA0NTI2NTIsMC40NTQ5NDMzMjkwOTU4NDA0NSwwLjYyMzI0MDQxMTI4MTU4NTcsMC44OTE5ODk0Njk1MjgxOTgyLDAuMDc4ODUwMDY4MTUxOTUwODQsMC40NTk0NzE0MDQ1NTI0NTk3LDAuMDgxMTAxNDM5ODkzMjQ1NywwLjQzNjc3OTQwOTY0Njk4NzksMC4zODQyNjgyMjQyMzkzNDkzNywwLjMyOTUxNjU4OTY0MTU3MTA0LDAuMzkxMTg4OTQ5MzQ2NTQyMzYsMC4yMjQ4NzM5MDA0MTM1MTMxOCwwLjg2MTA3ODczOTE2NjI1OTgsMC41ODMwNzk2OTU3MDE1OTkxLDAuMjI5NTkwODQ4MDg4MjY0NDcsMC4wLDAuOTUxMjEzMzAwMjI4MTE4OSwxLjU3MTAxMTE4NTY0NjA1NzEsMS4yMzc3MDU1ODgzNDA3NTkzLDAuNzU0Njc4MDEwOTQwNTUxOCwwLjQ4OTY5MDA2NTM4MzkxMTEzLDAuMDE2NzA2NDU3MzYxNTc4OTQsMC4wMDM2NzIzOTkwOTI0NjU2MzksMC4xMzcwNjUxODcwOTY1OTU3NiwxLjc2MzM4NjEzMDMzMjk0NjgsMC4wODE0OTQ1MzI1MjU1Mzk0LDEuMTcwMTg5NDk5ODU1MDQxNSwxLjczOTAwNzIzNDU3MzM2NDMsMC4zOTcwOTIwNDQzNTM0ODUxLDAuMTI0MTA5MDE0ODY4NzM2MjcsMC4yNTE4MzUwMTgzOTYzNzc1NiwwLjAsMC44MTk5MDAwMzU4NTgxNTQzLDAuNzQyMzkyNzE4NzkxOTYxNywwLjYzNDY1NjA3MTY2MjkwMjgsMC4wMjI5MDU5NDc2NDA1MzgyMTYsMC4wNDU4MjE0NjE4MjY1NjI4OCwwLjk2OTU1NjM5MTIzOTE2NjMsMC4xMjE1MjMwODk3MDY4OTc3NCwwLjE3MjczMzU3NTEwNTY2NzExLDAuNzY1NTg5ODkyODY0MjI3MywwLjA4MTM5MzMzMTI4OTI5MTM4LDAuMDc1ODIxNjgyODEwNzgzMzksMC45MDA0MTkxNzU2MjQ4NDc0LDAuMTQ1MTg5MjcwMzc3MTU5MTIsMC42ODYzNzU4NTYzOTk1MzYxLDAuMTg5MTcyODc4ODYxNDI3MywxLjA0ODAyOTE4NDM0MTQzMDcsMC4xOTk1MDcxMTcyNzE0MjMzNCwwLjg2Mjg5ODcwNzM4OTgzMTUsMC41NjA4NjU3NTk4NDk1NDgzLDAuODExMzM1NDQ0NDUwMzc4NCwxLjQ2MjQ3NjYxMTEzNzM5MDEsMS40MzI1NDU1NDI3MTY5OCwwLjQwODMzMzIxMjEzNzIyMjMsMC4zNDMxMDY1Njc4NTk2NDk2NiwwLjk0MDY4NjU4MzUxODk4MTksMC4yNTY4NjA1MjQ0MTU5Njk4NSwxLjEzMjI2NDYxNDEwNTIyNDYsMS4zNTQwNTU3NjIyOTA5NTQ2LDAuMDI4MTcxMzU0OTA0NzcwODUsMC45ODQ2NDExOTQzNDM1NjY5LDAuOTQ3MzM0MDUxMTMyMjAyMSwwLjAxMTg1MDc3NzA4MjE0NTIxNCwwLjA2MTIxMDIyOTk5Mjg2NjUxNiwxLjU3NDk0NzExODc1OTE1NTMsMC4wNzc0MzU5OTI2NTgxMzgyOCwwLjAyMTk5ODE0ODQxMTUxMjM3NSwwLjMzMzczNjEyMTY1NDUxMDUsMS4zNjQ2ODY3Mjc1MjM4MDM3LDAuMTk3MTQ2OTM3MjUxMDkxLDAuMDI2ODQ0MTgxMTIwMzk1NjYsMC4xMjgwNzY4MjE1NjU2MjgwNSwxLjAwNzc0NTI2NTk2MDY5MzQsMC4zNDcyNDc5MjgzODA5NjYyLDEuMjIxODI0NDA3NTc3NTE0NiwwLjA5MTYzMzk4Mjk1NjQwOTQ1LDAuOTMzNjAxOTc1NDQwOTc5LDAuOTg4MzU3NDg0MzQwNjY3NywwLjAwMTE3NTk1NzAzMzQxMDY2ODQsMS4zNzIwMjQwNTkyOTU2NTQzLDAuNjMyMTI5MzcxMTY2MjI5MiwwLjQwNTQ4OTY4MzE1MTI0NTEsMC4zNTIwMjE1NzQ5NzQwNjAwNiwwLjkyNzQyOTYxNjQ1MTI2MzQsMC4zMTY2NjQzNjc5MTQxOTk4MywwLjI5ODQxOTI5Njc0MTQ4NTYsMS4zNzA0OTc4MjI3NjE1MzU2LDAuNTE4MjAxODg3NjA3NTc0NSwxLjA1NjUxMTA0NDUwMjI1ODMsMC40MDAwMjkzOTEwNTAzMzg3NSwwLjQ0NTk2MzI2MzUxMTY1NzcsMC4wNDAzOTU1NDY3MDQ1MzA3MTYsMC4xMDQxODkzNjYxMDIyMTg2MywwLjE3MzQyMzIwMDg0NTcxODM4LDAuMjAwNTUyNzkxMzU3MDQwNCwwLjg3OTYwMTEyMDk0ODc5MTUsMC4xMTAzMzE0OTgwODY0NTI0OCwxLjA3NTM2MTI1MTgzMTA1NDcsMS42NDIxNDgwMTc4ODMzMDA4LDAuODU5NDg5NzM4OTQxMTkyNiwwLjIzMTE4MzQzOTQ5MzE3OTMyLDAuMDIwMTYyNjM4Mjc2ODE1NDE0LDAuMTEwMDgzODMzMzM2ODMwMTQsMS4wMjUxNDY0ODQzNzUsMC42NDMxMDI1MjY2NjQ3MzM5LDAuMzgzNTIxNDM3NjQ0OTU4NSwwLjI3Nzg1NzE4NDQxMDA5NTIsMC4xOTAwNjM0MzE4NTkwMTY0MiwwLjE5NTY5NzYzNTQxMjIxNjIsMC4zMzc3NjI0MTU0MDkwODgxMywxLjMwNDgxNjYwMzY2MDU4MzUsMC40MDQyMTc5Mjg2NDc5OTUsMC4yNTQzOTU3MjMzNDI4OTU1LDAuNjQ2NDc4Mjk1MzI2MjMyOSwwLjExODYxNzMxMTEyMDAzMzI2LDAuMzY0NTAxNzQ0NTA4NzQzMywwLjM5MTc1NjcxMzM5MDM1MDM0LDAuMDAxMjQ4NDA4OTIzODU2OTE0LDAuMjE0Mzg4MzI1ODEwNDMyNDMsMS43MTc1MzM3MDc2MTg3MTM0LDAuMDIzOTAzMjAyMjY1NTAxMDIyLDAuMDg0NjMzMjE2MjYxODYzNzEsMi4zNDI4MzA2NTc5NTg5ODQ0LDEuMDU3MDIwNDI1Nzk2NTA4OCwwLjcwNjcyNjAxNDYxNDEwNTIsMC4wMjk4OTkzMDI4NzAwMzUxNywwLjUwNDIzMTk4OTM4MzY5NzUsMS4zOTMxNzM2OTQ2MTA1OTU3LDIuNjY1ODgzMDY0MjcwMDE5NSwwLjE1MDQ2NDY1Mzk2ODgxMTA0LDAuMDY1OTk5MTk0OTc5NjY3NjYsMC45NTAwNjc5MzczNzQxMTUsMS44MjEzODgzNjM4MzgxOTU4LDEuMTY5MDk0NTYyNTMwNTE3NiwwLjI0NTQxNzE2Mjc3NTk5MzM1LDAuMjU1NzU3MTgyODM2NTMyNiwxLjM1NjUzMDY2NjM1MTMxODQsMC44MDcyNzIwNzY2MDY3NTA1LDAuMDg4MTYxOTIyOTkxMjc1NzksMC4zNTU3MTY0MDcyOTkwNDE3NSwwLjE4MzkwNTQyMjY4NzUzMDUyLDAuMjE2NzM1MjczNTk5NjI0NjMsMC4wMzQzNTQ5NzM1ODQ0MTM1MywwLjY3NzE3ODYyMTI5MjExNDMsMC4zNjQ3ODI4Njk4MTU4MjY0LDAuMDEzNzI5OTIwNjEwNzg1NDg0LDMuMDQyNjM2MTU2MDgyMTUzMywyLjM2Nzk4MDQ4MDE5NDA5MiwwLjU3ODcxMzIzODIzOTI4ODMsMS40NjY3MjMwODQ0NDk3NjgsMC40NDU4OTQzNjA1NDIyOTczNiwwLjIyNDIwNDk3MjM4NjM2MDE3LDAuNDYyODk5Nzc0MzEyOTczLDAuODQ2MTIzNTE2NTU5NjAwOCwwLjg0NDg1NTQyNzc0MjAwNDQsMC4yMjcxODg0MDgzNzQ3ODYzOCwwLjUyMjQxMDk4ODgwNzY3ODIsMC4zNjMyODgwMTUxMjcxODIsMS4wNTk1NTQ0NTc2NjQ0ODk3LDAuNzMzNzA5MTU2NTEzMjE0MSwwLjgyODg5NDg1MzU5MTkxOSwwLjM4OTY0NjE3MjUyMzQ5ODU0LDAuMzM2MDE3ODE3MjU4ODM0ODQsMS42MzE1NDg1MjM5MDI4OTMsMC4xMDg0MDc4OTk3MzczNTgxLDAuMDAyMDUyNjQ2NTk1OTg0Njk3MywwLjQ0NjMwNjgyNDY4NDE0MzA3LDAuNzM3ODkwODk5MTgxMzY2LDAuNTA0OTkwOTk0OTMwMjY3MywxLjUyMzQ1NDQyNzcxOTExNjIsMC4xMjA0NDAxMTA1NjQyMzE4NywwLjQ3Njk3MTQ0NzQ2NzgwMzk2LDAuMjE5OTYyMzczMzc1ODkyNjQsMC4wMzYzODIzNzcxNDc2NzQ1NiwwLjAwMzg4NDUwOTQzODY0ODgyLDEuMTM3OTY5MDE3MDI4ODA4NiwwLjA5NDE5NzY4MzAzNjMyNzM2LDAuMDQzMTk5ODg5MzYxODU4MzcsMC4zNTkwMzI5NTg3NDU5NTY0LDAuNzYzOTY4NDY3NzEyNDAyMywwLjIwMDY4NjQzOTg3MTc4ODAyLDAuMDMzMDQyMzQ4OTIxMjk4OTgsMC45MDA1MDU5MDAzODI5OTU2LDAuMzY2NTQ2MTI0MjE5ODk0NCwwLjA3MjIwNjgyNTAxNzkyOTA4LDAuNDQxMzU3NTIzMjAyODk2MSwyLjI4NDc4NTI3MDY5MDkxOCwwLjQ0NDI0ODA4MDI1MzYwMTEsMC40MjU5NjAwNjM5MzQzMjYxNywwLjUzOTczNjkyNjU1NTYzMzUsMC40ODI1NjczNDAxMzU1NzQzNCwwLjA1MjQyNzM4MTI3NzA4NDM1LDAuMDQ4MTg4MjM1NjEwNzIzNDk1LDAuMDIwMDczMzM1NjE3NzgwNjg1LDAuMjg4MjgzNzA1NzExMzY0NzUsMC41MDEyMDY5MzQ0NTIwNTY5LDAuMTcxMTE5MDY0MDkyNjM2MSwwLjQ0NTU4NzAzODk5MzgzNTQ1LDAuMTE1NjU5ODkyNTU5MDUxNTEsMi4zMzUwNDYwNTI5MzI3MzkzLDAuOTUyNjEzNTMyNTQzMTgyNCwwLjk2NTgwMjI1MjI5MjYzMzEsMC41ODUzNDI3NjQ4NTQ0MzEyLDAuNDc4MTk2MzgyNTIyNTgzLDAuOTMxOTExNzA2OTI0NDM4NSwzLjE1OTY3OTQxMjg0MTc5NywwLjYzMTMyMTc4NzgzNDE2NzUsMC40ODE5MzEwMzA3NTAyNzQ2NiwwLjQ5MDc0OTgzNTk2ODAxNzYsMS4xMjc5MDM1ODA2NjU1ODg0LDAuNTIwMDk4MDMwNTY3MTY5MiwwLjMzNTM3NDc0Mjc0NjM1MzE1LDEuMDc5MTg1ODQzNDY3NzEyNCwwLjAwMTg0OTE4NDI3ODM5ODc1MjIsMC4zMDAzNzQwMDEyNjQ1NzIxNCwwLjMzOTk3NzM4MzYxMzU4NjQsMC4wMTA4ODkyMjA5ODI3ODk5OTMsMC4yNTI2NzA1MjY1MDQ1MTY2LDAuOTYxMzEzMzY2ODg5OTUzNiwwLjU1MzU2OTMxNjg2NDAxMzcsMi44NjgyMjcyNDM0MjM0NjIsMC42MTYwNzg4NTM2MDcxNzc3LDAuMzM5NjM0MzI5MDgwNTgxNjcsMC43OTQ4MDk3NTg2NjMxNzc1LDEuMzA5MzE4MDY1NjQzMzEwNSwwLjc5NzE1MDk2OTUwNTMxMDEsMC4xMTEyNjAxNjA4MDM3OTQ4NiwxLjgwNTY0NzYxMTYxODA0MiwwLjYyMzA5Nzk1NjE4MDU3MjUsMC4zNjE5NjcxNzYxOTg5NTkzNSwwLjAzMjE0NzExMzIzMzgwNDcsMS4zNjMwMzYxNTU3MDA2ODM2LDIuNTkwODg0MjA4Njc5MTk5LDAuNjAwNzgyODcxMjQ2MzM3OSwwLjE0MDUxMDYwMzc4NTUxNDgzLDAuMzQ4OTAzODY0NjIyMTE2MSwxLjA3MDIyMTY2MjUyMTM2MjMsMS40Nzk0ODMwMDgzODQ3MDQ2LDAuMzk3NjcwMDMwNTkzODcyMDcsMC4yMDY3OTk1NjY3NDU3NTgwNiwwLjAxNTc0MzExNzc3OTQ5MzMzMiwwLjI0NjUwMzA1NTA5NTY3MjYsMS43NTU1ODk3MjM1ODcwMzYxLDAuMDYxMzM5NTA4NzQyMDk0MDQsMS4xMDExMTc3MzAxNDA2ODYsMC45ODkxMjkzMDQ4ODU4NjQzLDAuNDc5MTYwMjE5NDMwOTIzNDYsMC4wNDY1NDY5MzIzMDk4NjU5NSwxLjMzNTY5NzA1NDg2Mjk3NiwxLjI3MDk2MjgzNDM1ODIxNTMsMC4xMDkyMzU3MjYyOTY5MDE3LDAuMzc3Nzg3MjYyMjAxMzA5MiwwLjI1ODY2MTc3Njc4MTA4MjE1LDIuODYyOTYxMDUzODQ4MjY2NiwwLjMzMDAzMjYxNjg1MzcxNCwwLjMwMDIxMjM4MzI3MDI2MzY3LDAuMTQ5NTQ5OTc1OTkxMjQ5MDgsMC41NDI0NTY5ODQ1MTk5NTg1LDAuMDcyNTIyNjMyNzc3NjkwODksMC4xNTg2NTEzMzcwMjc1NDk3NCwwLjQwMDc2MDM1MjYxMTU0MTc1LDAuNzI4MjU2Mjg1MTkwNTgyMywwLjM3MDUzNjE3ODM1MDQ0ODYsMC4wMTU0MTM3ODkwNzg1OTMyNTQsMC4wMTU4NDA4MzQwMDY2NjcxMzcsMC40MDM0NDU4MTAwNzk1NzQ2LDAuMDI4NjgxNjA5Nzc5NTk2MzMsMS4zNDIwMDE5MTQ5NzgwMjczLDAuMDM2MDgzMjQ3NTEyNTc4OTY0LDAuODIzNjU1NzI0NTI1NDUxNywwLjc4OTI0NDc3MTAwMzcyMzEsMC4xMjM0MzUyNTE0MTQ3NzU4NSwwLjA3MDM4MzkxMzgxNTAyMTUxLDAuMDY4NjA4NzA4Njc5Njc2MDYsMC42OTMzMTE3NTA4ODg4MjQ1LDAuMCwwLjM2MDA0MTc2NzM1ODc3OTksMC4zNTE3OTUyODU5NDAxNzAzLDAuNzM0ODkyMzA4NzEyMDA1NiwyLjM4MzYxODM1NDc5NzM2MzMsMC4xOTU2ODI3Nzg5NTQ1MDU5MiwwLjAxOTgyMjE0NDg4MDg5MDg0NiwwLjQ5MjA5NDM5NzU0NDg2MDg0LDEuMTM2MzczNDAwNjg4MTcxNCwwLjc3NjI4NjY2MTYyNDkwODQsMC4zNTE3MzM0MTYzMTg4OTM0MywwLjA1OTA5MDM0OTgyMzIzNjQ2NSwwLjI0NTIxMjc0ODY0NjczNjE1LDEuMzcwMDM5MzQzODMzOTIzMywwLjUxMjE4OTMyODY3MDUwMTcsMC40NTM0Mjg2MjYwNjA0ODU4NCwyLjM0ODk5MDY3ODc4NzIzMTQsMC4xMzAyODg3NjQ4MzQ0MDQsMC45MTc5NjA0MDUzNDk3MzE0LDAuMjM0Njc1MjI4NTk1NzMzNjQsMS4yODcwOTM2MzkzNzM3NzkzLDAuMTgzOTU1Njg0MzA0MjM3MzcsMC44OTYxMTIzMjI4MDczMTIsMC4wNTE2OTc4Njg4NTM4MDc0NSwwLjU4NDk5NTUwODE5Mzk2OTcsMC4xNzUyMDk4MjAyNzA1MzgzMywwLjQzMjI3MDgyNDkwOTIxMDIsMC4xMDA2NDk4MzM2NzkxOTkyMiwwLjY5NDk3Mjk5MTk0MzM1OTQsMC4zMTI0MTgyNTIyMjk2OTA1NSwwLjAxNzI5NjA3MDIzMjk4NzQwNCwwLjIxMTQ5NDc1ODcyNTE2NjMyLDAuMTA4MjkwODY2MDE3MzQxNjEsMC41MjcwMjIzMDIxNTA3MjYzLDAuMzUwOTc2MTY5MTA5MzQ0NSwwLjg3MjA1OTA0NzIyMjEzNzUsMC43MDc3ODUyNDg3NTY0MDg3LDEuMDAwOTczODIwNjg2MzQwMywwLjI3NTg1NzgzNjAwODA3MTksMC4wMDEwNTU2OTkxOTEwNTYxOTIsMC4xMjE4NTgyNDY2MjQ0Njk3NiwwLjEzNTYxMTM3MDIwNTg3OTIsMC42MzI2NDIyNjkxMzQ1MjE1LDAuMzA4MjY4MzY4MjQ0MTcxMTQsMC40MzQ4MzUxNjU3MzkwNTk0NSwwLjYzOTEyMzA4MjE2MDk0OTcsMC4wMTU4Mjg2Mzc0MDYyMjk5NzMsMC4wNjA0MTg2MTY5ODAzMTQyNTUsMC4wODEzMDc0NzgyNDkwNzMwMywwLjgyNjM3Mjg2MTg2MjE4MjYsMC42ODY5MTA4MDgwODYzOTUzLDEuNDM1MTk0ODQ5OTY3OTU2NSwxLjUzNDU3MjM2Mjg5OTc4MDMsMC4xNzY3Mjg2MjExMjUyMjEyNSwwLjc2MTE4MTk1MDU2OTE1MjgsMC4xOTg2NjI0NTk4NTAzMTEyOCwwLjAzNjQzNDQzMDYyOTAxNDk3LDAuNDA3MzUwMjQyMTM3OTA4OTQsMC44NjE3Njc2NDk2NTA1NzM3LDAuNjQ0MjkwNTA2ODM5NzUyMiwwLjEzMjkxNTA5NDQ5NDgxOTY0LDAuMDg5NjE3Nzk2MjQyMjM3MDksMC4wMTM0ODIxNDAzNzcxNjM4ODcsMC4zNzQ4NDQyNTMwNjMyMDE5LDAuNjI4MjcyMjk0OTk4MTY5LDAuNDg2OTQ4MDQzMTA3OTg2NDUsMC42MjMxNDE5NDQ0MDg0MTY3LDAuMzU0Mjc5MTAwODk0OTI4LDAuODU2MDIyNDE3NTQ1MzE4NiwxLjg1NTQwMjcwODA1MzU4ODksMC4wMTg2ODg2MzAzMTI2ODExOTgsMC41NTgxMTA3NzM1NjMzODUsMC44NTcyNjI2NzA5OTM4MDQ5LDEuMzQyMzc4ODU0NzUxNTg3LDAuMTUwMjUwODIyMzA1Njc5MzIsMC40NzQ5ODUwOTI4NzgzNDE3LDAuMTQ3ODc5MzkxOTA4NjQ1NjMsMC4yOTEyMDk4NzY1MzczMjMsMC42MzYyNTkzMTczOTgwNzEzLDAuMjA0MTQ3MTAwNDQ4NjA4NCwwLjA3NjYzMzcxNDEzOTQ2MTUyLDEuMTI2MDQwNDU4Njc5MTk5MiwxLjA4MDA5NTQxMDM0Njk4NDksMC4xMjM5NzI1MjAyMzIyMDA2MiwwLjE0NTg4NzU4MzQ5NDE4NjQsMi4xMDAyMDk3MTI5ODIxNzc3LDAuMjI3MTg1OTY0NTg0MzUwNTksMC45ODA3MTgxMzU4MzM3NDAyLDAuODA3NTQ5Mjk3ODA5NjAwOCwwLjA5NDY4OTM0Njg0OTkxODM3LDEuMzAzODgwMzMzOTAwNDUxNywwLjM2MjIwMTY2MDg3MTUwNTc0LDAuMTY3NjA1MjIxMjcxNTE0OSwwLjM5Mzc4MzE4MTkwNTc0NjQ2LDAuMDgzMTU4ODM1NzY4Njk5NjUsMC4xOTc5NjMzNDIwNzA1Nzk1MywwLjM0NTM0NjgzODIzNTg1NTEsMC4wODM1Mzc0NTE5MjI4OTM1MiwwLjcxODU1MTAzOTY5NTczOTcsMC41OTA1MTE5MTgwNjc5MzIxLDAuMTcwMDEyNjIzMDcxNjcwNTMsMC4wMjIzMzEyODI0OTY0NTIzMywxLjM0MzA0Nzk3NjQ5MzgzNTQsMC40MjkzODI0NzMyMzAzNjE5NCwyLjQ2OTE0OTU4OTUzODU3NCwwLjE3ODA3MTMzNDk1ODA3NjQ4LDAuNjQxNjI3NDMwOTE1ODMyNSwwLjcxNDM0NjI4OTYzNDcwNDYsMC4yNDI0NzY4MjA5NDU3Mzk3NSwwLjM3MTE2MDg5NDYzMjMzOTUsMS4xMjY2NzgzNDc1ODc1ODU0LDAuMjEwNTcwMTI2NzcxOTI2ODgsMC4wODI1OTk1NzI4MzczNTI3NSwwLjA2NDU4NTEwNDU4NDY5MzkxLDAuNzE1OTU4MzU2ODU3Mjk5OCwwLjA4NjE3NTQ3MTU0NDI2NTc1LDAuODI0OTM1MTM4MjI1NTU1NCwwLjUyNzY3ODE5MTY2MTgzNDcsMC4yMTM1OTM4NTU1MDAyMjEyNSwxLjY1NTkwMTU1MTI0NjY0MywyLjM2NzQ3MDI2NDQzNDgxNDUsMC4yNTAxNDkyNzk4MzI4Mzk5NywwLjU5ODY5ODE5ODc5NTMxODYsMC45NDc0MjIyMDY0MDE4MjUsMC4xNTMxMDAwODgyMzg3MTYxMywwLjAwOTE2NDcxNzk3OTcyOTE3Nl19fX19"
    }
  },
  "min_score": 1,
  "explain": true,
  "_source": {
    "includes": [
      "id",
      "pic_path"
    ],
    "excludes": []
  },
  "sort": [
    {
      "create_time": {
        "order": "desc"
      }
    }
  ],
  "track_total_hits": 2147483647
}

搜索图片

duck

搜索结果

在这里插入图片描述

看到最后了一起薅个羊毛呗~

在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: elasticsearch java api官方文档是官方提供的关于使用elasticsearchJava API的指南和参考手册。它详细介绍了elasticsearch的各种功能、方法和参数,帮助开发人员理解和使用elasticsearchJava API。 官方文档提供了详细的使用示例和代码片段,帮助开发人员快速上手。通过官方文档,开发人员可以了解如何建立elasticsearch客户端连接、创建索引、添加文档、进行搜索和查询等操作。此外,官方文档还介绍了如何使用各种过滤器、聚合操作和排序功能,以及如何进行全文搜索和地理位置搜索。 官方文档也提供了关于如何处理异常和错误的指导,帮助开发人员更好地进行故障排查和处理。此外,官方文档还包含了关于性能调优、集群管理和安全配置等方面的建议和最佳实践。 总之,elasticsearch java api官方文档是一个非常有价值的工具,它为使用Java开发elasticsearch应用程序的开发人员提供了必要的指导和支持。通过阅读官方文档,开发人员可以更好地理解和掌握elasticsearchJava API,提高应用程序的性能和稳定性。 ### 回答2: elasticsearch java API官方文档是elasticsearch官方提供的用于Java开发的API文档。它包含了elasticsearch中所有Java API的详细说明和使用指南,可以帮助开发人员在Java应用程序中使用elasticsearch进行索引、搜索和管理数据。 elasticsearch是一个开源的分布式搜索和分析引擎,它基于Lucene库构建,并提供了一个RESTful API用于与其进行交互。elasticsearch java API官方文档通过提供详细的类和方法的说明,以及示例代码和最佳实践,帮助开发人员快速上手elasticsearch实现各种功能。 在elasticsearch java API官方文档中,开发人员可以了解到如何创建和配置elasticsearch客户端、连接到elasticsearch集群、执行不同类型的搜索、对结果进行排序和过滤、执行聚合操作、进行索引和文档的操作、处理分页和滚动搜索等等。 官方文档还提供了一系列的代码示例,帮助开发人员理解和学习elasticsearch java API的使用。这些示例覆盖了不同的应用场景,如基本搜索、复杂搜索、地理位置搜索、聚合查询等等,使得开发人员能够根据自己的需求,快速上手并进行开发。 总而言之,elasticsearch java API官方文档是elasticsearch官方提供的非常有价值的资源,将帮助开发人员在Java应用程序中有效地使用elasticsearch进行搜索和管理数据。通过阅读官方文档,开发人员能够深入了解elasticsearch的工作原理和各种功能的使用方法,从而更好地构建出强大的搜索应用。 ### 回答3: Elasticsearch Java API官方文档是为了帮助Java开发者使用Elasticsearch搜索引擎而编写的一份指南。这个文档详细介绍了如何在Java应用程序中使用Elasticsearch的各种功能和特性。 该文档首先提供了关于Elasticsearch的简要介绍,包括其核心概念、工作原理和主要用途。然后,它详细描述了如何在Java应用程序中集成和配置Elasticsearch客户端,并提供了使用示例。 接下来,文档介绍了Elasticsearch搜索功能,包括如何构建查询、执行过滤和排序操作以及如何使用聚合框架。它还解释了Elasticsearch中的分析器和分词器是如何工作的,并且给出了一些常见的搜索用例和示例代码。 此外,文档还介绍了Elasticsearch的索引管理和数据操作,包括如何创建索引、映射字段和执行文档的添加、更新和删除等操作。它还介绍了如何使用批量API执行批量操作以提高性能。 最后,文档提供了关于Elasticsearch的聚合和分析的详细信息,包括基本聚合、嵌套聚合和地理空间聚合等。它还解释了如何通过使用Elasticsearch的插件系统扩展其功能。 总体而言,Elasticsearch Java API官方文档提供了丰富的内容和严谨的示例代码,使Java开发者能够快速上手并有效地利用Elasticsearch的强大功能。无论是初学者还是有经验的开发者,都可以从这个文档中获得宝贵的指导和参考。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值