快速开始
> 文档中心 > 文档中心 > INFINI Easysearch > 功能手册 > 客户端 > 快速开始

快速开始 #

本页指导您完成Java客户端的安装过程,展示了如何实例化客户端,以及如何使用它执行基本的 Easysearch 操作。

安装 #

easysearch-client 已经发布到 Maven 中央仓库:https://repo1.maven.org/maven2/

安装需要 jdk11 或以上版本

在Maven项目中安装 #

在您项目的 pom 文件的 dependencies 区域添加以下依赖

<dependencies>
    <dependency>
        <groupId>com.infinilabs</groupId>
        <artifactId>easysearch-client</artifactId>
        <version>1.0.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.5.10</version>
    </dependency>
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpcore-nio</artifactId>
        <version>4.4.12</version>
    </dependency>
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpasyncclient</artifactId>
        <version>4.1.4</version>
    </dependency>
    <dependency>
        <groupId>joda-time</groupId>
        <artifactId>joda-time</artifactId>
        <version>2.10.4</version>
    </dependency>
    <dependency>
        <groupId>org.apache.lucene</groupId>
        <artifactId>lucene-core</artifactId>
        <version>8.11.2</version>
        <scope>compile</scope>
        <exclusions>
            <exclusion>
                <artifactId>*</artifactId>
                <groupId>*</groupId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.apache.lucene</groupId>
        <artifactId>lucene-analyzers-common</artifactId>
        <version>8.11.2</version>
        <scope>compile</scope>
        <exclusions>
            <exclusion>
                <artifactId>*</artifactId>
                <groupId>*</groupId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.apache.lucene</groupId>
        <artifactId>lucene-backward-codecs</artifactId>
        <version>8.11.2</version>
        <scope>compile</scope>
        <exclusions>
            <exclusion>
                <artifactId>*</artifactId>
                <groupId>*</groupId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.apache.lucene</groupId>
        <artifactId>lucene-grouping</artifactId>
        <version>8.11.2</version>
        <scope>compile</scope>
        <exclusions>
            <exclusion>
                <artifactId>*</artifactId>
                <groupId>*</groupId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.apache.lucene</groupId>
        <artifactId>lucene-highlighter</artifactId>
        <version>8.11.2</version>
        <scope>compile</scope>
        <exclusions>
            <exclusion>
                <artifactId>*</artifactId>
                <groupId>*</groupId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.apache.lucene</groupId>
        <artifactId>lucene-join</artifactId>
        <version>8.11.2</version>
        <scope>compile</scope>
        <exclusions>
            <exclusion>
                <artifactId>*</artifactId>
                <groupId>*</groupId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.apache.lucene</groupId>
        <artifactId>lucene-memory</artifactId>
        <version>8.11.2</version>
        <scope>compile</scope>
        <exclusions>
            <exclusion>
                <artifactId>*</artifactId>
                <groupId>*</groupId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.apache.lucene</groupId>
        <artifactId>lucene-misc</artifactId>
        <version>8.11.2</version>
        <scope>compile</scope>
        <exclusions>
            <exclusion>
                <artifactId>*</artifactId>
                <groupId>*</groupId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.apache.lucene</groupId>
        <artifactId>lucene-queries</artifactId>
        <version>8.11.2</version>
        <scope>compile</scope>
        <exclusions>
            <exclusion>
                <artifactId>*</artifactId>
                <groupId>*</groupId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.apache.lucene</groupId>
        <artifactId>lucene-queryparser</artifactId>
        <version>8.11.2</version>
        <scope>compile</scope>
        <exclusions>
            <exclusion>
                <artifactId>*</artifactId>
                <groupId>*</groupId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.apache.lucene</groupId>
        <artifactId>lucene-sandbox</artifactId>
        <version>8.11.2</version>
        <scope>compile</scope>
        <exclusions>
            <exclusion>
                <artifactId>*</artifactId>
                <groupId>*</groupId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.apache.lucene</groupId>
        <artifactId>lucene-spatial3d</artifactId>
        <version>8.11.2</version>
        <scope>compile</scope>
        <exclusions>
            <exclusion>
                <artifactId>*</artifactId>
                <groupId>*</groupId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.apache.lucene</groupId>
        <artifactId>lucene-suggest</artifactId>
        <version>8.11.2</version>
        <scope>compile</scope>
        <exclusions>
            <exclusion>
                <artifactId>*</artifactId>
                <groupId>*</groupId>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>

在 gradle 项目中安装 #

在您项目的 build.gradle 文件的 dependencies 区域添加以下依赖

dependencies {
    implementation 'com.infinilabs:easysearch-client:1.0.1'
    implementation "org.apache.logging.log4j:log4j-api:2.19.0"
    implementation "org.apache.logging.log4j:log4j-core:2.19.0"
    implementation 'org.apache.httpcomponents:httpclient:4.5.10'
    implementation 'org.apache.httpcomponents:httpcore-nio:4.4.12'
    implementation 'org.apache.httpcomponents:httpasyncclient:4.1.4'
    implementation 'joda-time:joda-time:2.10.4'
    implementation ('org.apache.lucene:lucene-core:8.11.2') {
        exclude group: '*', module: '*'
    }
    implementation ('org.apache.lucene:lucene-analyzers-common:8.11.2') {
        exclude group: '*', module: '*'
    }
    implementation ('org.apache.lucene:lucene-backward-codecs:8.11.2') {
        exclude group: '*', module: '*'
    }
    implementation ('org.apache.lucene:lucene-grouping:8.11.2') {
        exclude group: '*', module: '*'
    }
    implementation ('org.apache.lucene:lucene-highlighter:8.11.2') {
        exclude group: '*', module: '*'
    }
    implementation ('org.apache.lucene:lucene-join:8.11.2') {
        exclude group: '*', module: '*'
    }
    implementation ('org.apache.lucene:lucene-memory:8.11.2') {
        exclude group: '*', module: '*'
    }
    implementation ('org.apache.lucene:lucene-misc:8.11.2') {
        exclude group: '*', module: '*'
    }
    implementation ('org.apache.lucene:lucene-queries:8.11.2') {
        exclude group: '*', module: '*'
    }
    implementation ('org.apache.lucene:lucene-queryparser:8.11.2') {
        exclude group: '*', module: '*'
    }
    implementation ('org.apache.lucene:lucene-sandbox:8.11.2') {
        exclude group: '*', module: '*'
    }
    implementation ('org.apache.lucene:lucene-spatial3d:8.11.2') {
        exclude group: '*', module: '*'
    }
    implementation ('org.apache.lucene:lucene-suggest:8.11.2') {
        exclude group: '*', module: '*'
    }
    
  ......
}

初始化客户端 #

假设您本地启动了 Easysearch 服务,配置 security.enabled:true,用户名 admin,密码 admin。

import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.nio.client.HttpAsyncClientBuilder;
import org.apache.http.nio.conn.ssl.SSLIOSessionStrategy;
import org.apache.http.ssl.SSLContextBuilder;
import org.easysearch.action.admin.indices.delete.DeleteIndexRequest;
import org.easysearch.action.bulk.BulkRequest;
import org.easysearch.action.bulk.BulkResponse;
import org.easysearch.action.delete.DeleteRequest;
import org.easysearch.action.delete.DeleteResponse;
import org.easysearch.action.get.GetRequest;
import org.easysearch.action.get.GetResponse;
import org.easysearch.action.index.IndexRequest;
import org.easysearch.action.search.SearchRequest;
import org.easysearch.action.search.SearchResponse;
import org.easysearch.action.support.master.AcknowledgedResponse;
import org.easysearch.client.RequestOptions;
import org.easysearch.client.RestClient;
import org.easysearch.client.RestHighLevelClient;
import org.easysearch.client.indices.CreateIndexRequest;
import org.easysearch.client.security.GetUsersRequest;
import org.easysearch.client.security.GetUsersResponse;
import org.easysearch.common.Strings;
import org.easysearch.common.settings.Settings;
import org.easysearch.common.xcontent.XContentType;
import org.easysearch.index.query.QueryBuilders;
import org.easysearch.search.builder.SearchSourceBuilder;


public class EasearchSearchConfig {

  String userName = "admin";
  String password = "admin";
     
  public RestHighLevelClient initEasysearchClient(String user, String password) throws Exception {
    try {
        HttpHost[] httpHostArray = new HttpHost[1];
        httpHostArray[0] = new HttpHost("localhost", 9200, "https");
        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();

        credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(userName, password));
        SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, (TrustStrategy) (chain, authType) -> true).build();
        SSLIOSessionStrategy sessionStrategy = new SSLIOSessionStrategy(sslContext, NoopHostnameVerifier.INSTANCE);
        return new RestHighLevelClient(RestClient.builder(httpHostArray).setHttpClientConfigCallback((HttpAsyncClientBuilder httpAsyncClientBuilder) -> {
            httpAsyncClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
            httpAsyncClientBuilder.disableAuthCaching();
            httpAsyncClientBuilder.setSSLStrategy(sessionStrategy);
            return httpAsyncClientBuilder;
        }));
    } catch (Exception e) {
        throw new RuntimeException("Failed to create Easysearch client", e);
    }
  }
  
   ......
   
}   

使用示例 #

    RestHighLevelClient client = initEasysearchClient(userName, password);

    CreateIndexRequest createIndexRequest = new CreateIndexRequest("test-index");
    createIndexRequest.settings(Settings.builder()
        .put("index.number_of_shards", 1)
        .put("index.number_of_replicas", 1)
    );

    //Create index
    client.indices().create(createIndexRequest, RequestOptions.DEFAULT);

    // Bulk
    BulkRequest bulkRequest = new BulkRequest();
    for (int i = 0; i < 10; i++) {
      IndexRequest indexRequest = new IndexRequest("test-index") // 替换为您的索引名称
          .id(Integer.toString(i)) // 文档ID
          .source("{\"field1\":\"value" + i + "\"}", XContentType.JSON);
      bulkRequest.add(indexRequest);
    }
    BulkResponse bulkResponse = client.bulk(bulkRequest, RequestOptions.DEFAULT);
    if (bulkResponse.hasFailures()) {
      System.out.println("Bulk operation had failures: " + bulkResponse.buildFailureMessage());
    } else {
      System.out.println("Bulk operation completed successfully");
    }

    // GET
    GetRequest getRequest = new GetRequest("test-index", "1");
    GetResponse response = client.get(getRequest, RequestOptions.DEFAULT);
    System.out.println(response.getSourceAsString());

    // Delete doc
    DeleteRequest deleteDocumentRequest = new DeleteRequest("test-index", "1");
    DeleteResponse deleteResponse = client.delete(deleteDocumentRequest, RequestOptions.DEFAULT);
    System.out.println(Strings.toString(deleteResponse));

    //Delete the index
    DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest("test-index"); //Index name.
    AcknowledgedResponse deleteIndexResponse = client.indices().delete(deleteIndexRequest, RequestOptions.DEFAULT);
    System.out.println(Strings.toString(deleteIndexResponse));
    
    client.close();