Java で強力な Elastisearch 検索エンジンを使用するためのコード例

黄舟
リリース: 2017-05-21 10:17:47
オリジナル
1809 人が閲覧しました

この記事では主にJavaを使用した強力なElastisearchsearchエンジンのサンプルコードを紹介していますので、興味のある方はぜひ学んでみてください

Elastisearchは非常に強力で使いやすい検索インデックスです。エンジン

システム上で Elastisearch を実行するには、次の手順のみが必要です

1. Elastisearch をダウンロードします

コードは次のとおりです:

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.4.0.zip
ログイン後にコピー

2. 解凍します

unzip elasticsearch-5.4.0.zip
ログイン後にコピー

3. 現時点では、 elastisearch はメモリ オーバーフロー (OOM) により直接強制終了され、非常に大量のメモリを消費するため、メモリが比較的少ないサーバーで実行する場合は、まず jvm のメモリ サイズを変更する必要があります

elasticsearch-5.4.0/bin/elasticsearch
ログイン後にコピー

行のスタック サイズを変更する22 と 23 を 512M にします

vi elasticsearch-5.4.0/config/jvm.options
ログイン後にコピー

再起動後も強制終了される場合は、少し小さく変更してください

4. テストが成功したかどうか

-Xms512M
-Xmx512M
ログイン後にコピー

次の戻り情報が表示されます:

curl  'http://localhost:9200/?pretty'
ログイン後にコピー

は起動が成功したことを示します。

次に、Javaの

APIを使用してElasticsearchを操作しますまず、elasticsearchとlog4jパッケージをインポートします

POM

{
      "status":  200,
      "name":  "Shrunken  Bones",
      "version":  {
            "number":  "1.4.0",
            "lucene_version":  "4.10"
      },
      "tagline":  "You  Know,  for  Search"
}
ログイン後にコピー

以下は、よく使用されるいくつかの操作です

1 クライアントを作成します

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.jk</groupId>
  <artifactId>ElasticsearchExample</artifactId>
  <version>1.0-SNAPSHOT</version>
  <dependencies>
    <dependency>
      <groupId>org.elasticsearch.client</groupId>
      <artifactId>transport</artifactId>
      <!--用哪个版本就填什么-->
      <version>5.4.0</version>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-api</artifactId>
      <version>2.7</version>
    </dependency>
  </dependencies>

</project>
ログイン後にコピー

2。インデックスの作成

Client client = null;
    try {
      client = new PreBuiltTransportClient(Settings.EMPTY)
          .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300));
    } catch (Exception e) {
      e.printStackTrace();
    }
ログイン後にコピー

3.

データの挿入

/**
   * 创建索引,有则先删除
   * @param client
   */
  private static void recreateIndex(Client client) {
    if (client.admin().indices().prepareExists(index).execute().actionGet()
        .isExists()) {
      DeleteIndexResponse deleteIndexResponse = client.admin().indices()
          .delete(new DeleteIndexRequest(index)).actionGet();
      System.out.println("delete index :");
      System.out.println(deleteIndexResponse);
    }

    CreateIndexResponse createIndexResponse = client.admin().indices()
        .prepareCreate(index).execute().actionGet();
    System.out.println("create index :");
    System.out.println(createIndexResponse);
  }
ログイン後にコピー
4.

クエリ

All

/**
   * 插入数据
   * @param client
   */
  @SuppressWarnings({"rawtypes", "unchecked"})
  private static void doIndex(final Client client) {
    Map s11 = new LinkedHashMap();
    s11.put("title", "Think in java");
    s11.put("origin", "美国");
    s11.put("description", "初级java开发人员必读的书");
    s11.put("author", "Bruce Eckel");
    s11.put("price", 108);

    Map s12 = new LinkedHashMap();
    s12.put("title", "Head First Java");
    s12.put("origin", "英国");
    s12.put("description", "java入门教材");
    s12.put("author", "Kathy Sierra");
    s12.put("price", 54);

    Map s21 = new LinkedHashMap();
    s21.put("title", "Design Pattern");
    s21.put("origin", "法国");
    s21.put("description", "程序员不得不读的设计模式");
    s21.put("author", "Kathy Sierra");
    s21.put("price", 89);

    Map s22 = new LinkedHashMap();
    s22.put("title", "黑客与画家");
    s22.put("origin", "法国");
    s22.put("description", "读完之后脑洞大开");
    s22.put("author", "Paul Graham");
    s22.put("price", 35);

    BulkResponse bulkResponse = client
        .prepareBulk()
        .add(client.prepareIndex(index, type).setId("11").setSource(s11).setOpType(IndexRequest.OpType.INDEX).request())
        .add(client.prepareIndex(index, type).setId("12").setSource(s12).setOpType(IndexRequest.OpType.INDEX).request())
        .add(client.prepareIndex(index, type).setId("21").setSource(s21).setOpType(IndexRequest.OpType.INDEX).request())
        .add(client.prepareIndex(index, type).setId("22").setSource(s22).setOpType(IndexRequest.OpType.INDEX).request())
        .execute().actionGet();
    if (bulkResponse.hasFailures()) {
      System.err.println("index docs ERROR:" + bulkResponse.buildFailureMessage());
    } else {
      System.out.println("index docs SUCCESS:");
      System.out.println(bulkResponse);
    }
  }
5. キーワードクエリ

  /**
   * 查询所有
   */
  private static void searchAll(Client client) {
    SearchResponse response = client.prepareSearch(index)
        .setQuery(QueryBuilders.matchAllQuery())
        .setExplain(true).execute().actionGet();
    System.out.println("searchAll : ");
    for (SearchHit searchHit : response.getHits()) {
      System.out.println("********");
      System.out.println(searchHit.getSource());
    }
  }
ログイン後にコピー
6.

りー7並べ替えてください

以上がJava で強力な Elastisearch 検索エンジンを使用するためのコード例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート