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

这篇具有很好参考价值的文章主要介绍了elastic search java api 向量搜索实践 / java结合es实现 以图搜图。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

准备数据

elastic search java api 向量搜索实践 / java结合es实现 以图搜图,elasticsearch,springboot,java,elasticsearch,机器学习

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
    }
  }
}

搜索图片

elastic search java api 向量搜索实践 / java结合es实现 以图搜图,elasticsearch,springboot,java,elasticsearch,机器学习

搜索结果

elastic search java api 向量搜索实践 / java结合es实现 以图搜图,elasticsearch,springboot,java,elasticsearch,机器学习文章来源地址https://www.toymoban.com/news/detail-745546.html

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
}

搜索图片

elastic search java api 向量搜索实践 / java结合es实现 以图搜图,elasticsearch,springboot,java,elasticsearch,机器学习

搜索结果

elastic search java api 向量搜索实践 / java结合es实现 以图搜图,elasticsearch,springboot,java,elasticsearch,机器学习

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

到了这里,关于elastic search java api 向量搜索实践 / java结合es实现 以图搜图的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Boot 整合 分布式搜索引擎 Elastic Search 实现 数据聚合

    本文参考黑马 分布式Elastic search Elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容 本篇文章将讲解 Elastic Search 如何实现数据聚合,以及 在项目实战中如何通过数据聚合实现业务需求并完成功能。 以下为官方

    2024年02月11日
    浏览(32)
  • Spring Boot 整合 分布式搜索引擎 Elastic Search 实现 我附近的、酒店竞排

    本文参考黑马 分布式Elastic search Elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容 在酒店列表页的右侧,有一个小地图,点击地图的定位按钮,地图会找到你所在的位置: 点击定位后,会发送给服务端以下请求

    2024年02月06日
    浏览(29)
  • ES搜索引擎入门+最佳实践(九):项目实战(二)--elasticsearch java api 进行数据增删改查

            本篇是这个系列的最后一篇了,在这之前可以先看看前面的内容: ES搜索引擎入门+最佳实践(一)_flame.liu的博客-CSDN博客 ES搜索引擎入门+最佳实践(二)_flame.liu的博客-CSDN博客 ES搜索引擎入门+最佳实践(三)_flame.liu的博客-CSDN博客 ES搜索引擎入门+最佳实践(四)_flame.liu的博客

    2024年02月12日
    浏览(38)
  • 【搜索引擎】elastic search核心概念

    前言 本文不涉及ES的具体安装下载、操作、集群的内容,这部分内容会放在后面一篇文章中。本文只包含ES的核心理论,看完本文再去学ES的细节会事半功倍。 目录 1.由日志存储引出的问题 2.什么是ES? 3.ES的数据结构 4.ES的核心原理 5.联系作者 本文或者说本系列的来源: 前面

    2024年02月03日
    浏览(37)
  • fastapi结合Manticore Search、elasticsearch、mysql实现全文搜索

    创建测试表 测试表插入数据 表字段描述 字段意义 mysql数据同步到es es查看数据(Elasticvue插件)   mysql数据同步到Manticore 注:Manticore 和 Mysql 使用pymysql即mysql客户端 Manticore 数据查询(工具Webyog SQLyog)   es安全认证连接(参考官网) 按fields查询方法封装,输入参数fields 筛选器,

    2024年02月12日
    浏览(32)
  • elastic search es 分组统计 aggs 次数用法

    参考链接:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations.html es 各个版本的语法可能会不一样,如果大家在用的时候发现语法报错了,请查阅相关版本的语法。 刚需要按 ip 地址统计某个接口的访问次数,查了下 es 分组统计次数 aggs 的用法,特此记录一下,方

    2024年02月11日
    浏览(44)
  • 使用docker安装elastic search[ES]和kibana

    使用docker安装elastic search和kibana,版本均为7.17.1 docker pull# 去dockerhub看具体版本,这里用7.17.1 临时安装生成文件# 参数说明 -d 后台启动 –name 起别名即:NAMES -p 9200:9200 将端口映射出来 elasticsearch的9200端口是供外部访问使用;9300端口是供内部访问使用集群间通讯 -e “discovery.

    2024年02月14日
    浏览(29)
  • 微服务 分布式搜索引擎 Elastic Search RestAPI

    本文参考黑马 分布式Elastic search Elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容 ES官方提供了各种不同语言的客户端,用来操作ES。这些客户端的本质就是组装DSL语句,通过http请求发送给ES。官方文档地址:

    2024年01月24日
    浏览(35)
  • 微服务分布式搜索引擎 Elastic Search RestClient 操作文档

    本文参考黑马 分布式Elastic search Elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容 初始化RestHighLevelClient 为了与索引库操作分离,我们再次参加一个测试类,做两件事情: 初始化RestHighLevelClient 我们的酒店数据

    2024年01月24日
    浏览(29)
  • 【elastic search】JAVA操作elastic search

    目录 1.环境准备 2.ES JAVA API 3.Spring Boot操作ES 本文是作者ES系列的第三篇文章,关于ES的核心概念移步: https://bugman.blog.csdn.net/article/details/135342256?spm=1001.2014.3001.5502 关于ES的下载安装教程以及基本使用,移步: https://bugman.blog.csdn.net/article/details/135342256?spm=1001.2014.3001.5502 在前文

    2024年01月25日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包