ES 8.14 Java 代码调用,增加knnSearch 和 混合检索 mixSearch

1、pom依赖

        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-client</artifactId>
            <version>8.14.0</version>
        </dependency>
        <dependency>
            <groupId>co.elastic.clients</groupId>
            <artifactId>elasticsearch-java</artifactId>
            <version>8.14.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
            <version>2.9.0</version> <!-- 使用你所需的版本 -->
        </dependency>
        <dependency>
            <groupId>jakarta.json.bind</groupId>
            <artifactId>jakarta.json.bind-api</artifactId>
            <version>2.0.0</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.13.2</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish</groupId>
            <artifactId>jakarta.json</artifactId>
            <version>2.0.1</version>
        </dependency>

2、ES 8.1的相关接口 主要参考: Java封装Elasticsearch8常用接口方法(一)_elasticsearch8 java接口-CSDN博客

3、EsService 主要 增加knnSearch 和 混合检索 mixSearch

/**
     * KNN搜索
     *
     * @param indexName 索引名称
     * @param vector 向量数据
     * @param field KNN字段名
     * @return KnnSearchResponse
     * @throws Exception
     */
    public SearchResponse knnSearchTestTwo(String indexName, List<Float> vector, String field, List<String> list) throws Exception {
        ElasticsearchClient client = ESClientPool.getClient();

        KnnQuery knnQuery = KnnQuery.of(m -> m.field(field).queryVector(vector).numCandidates(100));

        SearchResponse<ObjectNode> response = client.search(s -> s
                        .index(indexName)
                        .query(knnQuery._toQuery())
                        .source(SourceConfig.of(sf -> sf.filter(f -> f.includes(list))))
                , ObjectNode.class);

        List<ObjectNode> result = new ArrayList<>();
        for (Hit<ObjectNode> hit : response.hits().hits()) {
            ObjectNode source = hit.source();
            source.put("score", hit.score());
            result.add(source);
        }
        log.info("SearchResponse: {}", JSON.toJSONString(result));

        ESClientPool.returnClient(client);

        return response;
    }


    /**
     * 混合查询测试
     *
     * @param indexName 索引名称
     * @param searchText 查询文本
     * @param vector 向量
     * @param knnField KNN字段名
     * @return SearchResponse
     * @throws Exception
     */
    public SearchResponse mixSearch(String indexName, String searchText, String searchField, List<Float> vector, String knnField, List<String> returnFields) throws Exception {
        ElasticsearchClient client = ESClientPool.getClient();

        MatchQuery searchTextQuery = new MatchQuery.Builder().field(searchField).query(searchText).build();

        KnnQuery knnQuery = new KnnQuery.Builder()
                .field(knnField)
                .queryVector(vector)
                .numCandidates(100)
                .build();

        // 创建must子句的bool查询,这里只有一个should子句
        BoolQuery boolQuery = new BoolQuery.Builder()
                .must(searchTextQuery._toQuery()) // 必须满足的文本匹配
                .should(knnQuery._toQuery()) // 可以满足的向量相似性
                .build();

        SearchResponse<ObjectNode> response = client.search(s -> s
                        .index(indexName)
                        .query(boolQuery._toQuery())
                        .source(SourceConfig.of(sf -> sf.filter(f -> f.includes(returnFields))))
                , ObjectNode.class);


        ESClientPool.returnClient(client);

        return response;
    }

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
安装 Elasticsearch 8.14 在 CentOS 7 上可以通过官方的 RPM 包或者从源代码编译的方式进行。这里提供两种常见的安装方法: **方法一:使用官方 RPM 包** 1. **更新系统和添加存储库**: ```sh sudo yum update -y sudo yum install epel-release -y # 如果还没有安装 EPEL(额外的第三方软件仓库) ``` 2. **安装依赖**: ```sh sudo yum install -1.8.0-openjdk-devel git ``` 3. **下载并安装 Elasticsearch RPM**: ```sh sudo curl -o /etc/yum.repos.d/elasticsearch-8.repo https://artifacts.elastic.co/packages/7.x/yum/elasticsearch-8.x.repo sudo yum install -y elasticsearch ``` 4. **启动、配置和设置服务**: ```sh sudo systemctl start elasticsearch sudo systemctl enable elasticsearch ``` 5. **首次启动后,可能需要设置管理员密码**: ```sh sudo bin/elasticsearch-plugin list # 查看插件 sudo bin/elasticsearch-setup-passwords interactive ``` **方法二:从源代码编译安装** 1. **下载 Elasticsearch 源码**: ```sh mkdir -p /opt/elasticsearch cd /opt/elasticsearch wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.14.0.tar.gz tar -zxvf elasticsearch-8.14.0.tar.gz ``` 2. **创建配置文件**: ```sh cp elasticsearch-8.14.0/bin/elasticsearch.in.sh elasticsearch-8.14.0/bin/elasticsearch.sh ``` 3. **配置环境变量和启动**: ```sh echo "export PATH=$PATH:/opt/elasticsearch/elasticsearch-8.14.0/bin" >> ~/.bashrc source ~/.bashrc bin/elasticsearch ``` 4. **设置服务**: ```sh sudo systemctl start elasticsearch sudo systemctl enable elasticsearch ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值