[1] Elasticsearch – Instalacja

29 marca 2022 Wyłączono przez Adam [zicherka] Nogły

Zainstaluj wyszukiwarkę pełnotekstową [Elasticsearch].

[1] Zainstaluj i uruchom Elasticsearch.

Instalacja Java nie jest już wymagana, ponieważ zintegrowana Java jest zawarta w Elasticsearch.

[root@vlsr01 ~]# cat > /etc/yum.repos.d/elasticsearch.repo <<EOF
[elasticsearch-7.x]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF

[root@vlsr01 ~]# dnf install elasticsearch
[root@vlsr01 ~]# systemctl enable --now elasticsearch
# sprawdź status
[root@vlsr01 ~]# curl http://127.0.0.1:9200
{
  "name" : "vlsr01.zicher.lab",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "zZf_1nHnQl2GaZnAgpO-2Q",
  "version" : {
    "number" : "7.17.1",
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" : "e5acb99f822233d62d6444ce45a4543dc1c8059a",
    "build_date" : "2022-02-23T22:20:54.153567231Z",
    "build_snapshot" : false,
    "lucene_version" : "8.11.1",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

[2] Jeśli używasz Elasticsearch z innych hostów, zapoznaj się z ustawieniem dla klastrowania.

Musisz skonfigurować te same ustawienia z klastrowaniem, nawet jeśli pojedynczy węzeł jest używany w przypadku odbierania żądań od innych hostów.

[3] To jest podstawowe zastosowanie Elasticsearch. Najpierw utwórz indeks, to jest jak baza danych w RDB.

# pokaż listę indeksów ([pretty] ma pokazać JSON w języku zrozumiałym dla człowieka)
[root@vlsr01 ~]# curl http://127.0.0.1:9200/_aliases?pretty
{ }

# stwórz Index
[root@vlsr01 ~]# curl -X PUT "http://127.0.0.1:9200/test_index"
{"acknowledged":true,"shards_acknowledged":true,"index":"test_index"}

# sprawdź
[root@vlsr01 ~]# curl http://127.0.0.1:9200/_aliases?pretty
{
  "test_index" : {
    "aliases" : { }
  }
}
[root@vlsr01 ~]# curl http://127.0.0.1:9200/test_index/_settings?pretty
{
  "test_index" : {
    "settings" : {
      "index" : {
        "routing" : {
          "allocation" : {
            "include" : {
              "_tier_preference" : "data_content"
            }
          }
        },
        "number_of_shards" : "1",
        "provided_name" : "test_index",
        "creation_date" : "1647938056753",
        "number_of_replicas" : "1",
        "uuid" : "nRIaDNCOT6mi6_aotyUoSA",
        "version" : {
          "created" : "7170199"
        }
      }
    }
  }
}

[4] Zdefiniuj mapowanie i wstaw dane testowe.

Mapowanie definiuje strukturę indeksu. W przypadku wstawiania danych, mapowanie zostanie zdefiniowane automatycznie, ale oczywiście istnieje możliwość ręcznego zdefiniowania.

# wstaw dane
[root@vlsr01 ~]# curl -H "Content-Type: application/json" \
-X PUT "http://127.0.0.1:9200/test_index/doc01/1" -d '{
"subject" : "Test Post No.1",
"description" : "This is the initial post",
"content" : "This is the test message for using Elasticsearch."
}'
{"_index":"test_index","_type":"doc01","_id":"1","_version":1,"result":"created","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":0,"_primary_term":1}

# pokaż mapowanie
[root@vlsr01 ~]# curl "http://127.0.0.1:9200/test_index/_mapping/?pretty"
{
  "test_index" : {
    "mappings" : {
      "properties" : {
        "content" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "description" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "subject" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        }
      }
    }
  }
}

# pokaż dane
[root@vlsr01 ~]#  curl "http://127.0.0.1:9200/test_index/doc01/1?pretty"
{
  "_index" : "test_index",
  "_type" : "doc01",
  "_id" : "1",
  "_version" : 1,
  "_seq_no" : 0,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "subject" : "Test Post No.1",
    "description" : "This is the initial post",
    "content" : "This is the test message for using Elasticsearch."
  }
}

# wyszukaj dane
# przykład warunków wyszukiwania poniżej oznacza, że pole [description] zawiera słowo [initial]
[root@vlsr01 ~]# curl "http://127.0.0.1:9200/test_index/doc01/_search?q=description:initial&pretty=true"
{
  "took" : 344,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 0.2876821,
    "hits" : [
      {
        "_index" : "test_index",
        "_type" : "doc01",
        "_id" : "1",
        "_score" : 0.2876821,
        "_source" : {
          "subject" : "Test Post No.1",
          "description" : "This is the initial post",
          "content" : "This is the test message for using Elasticsearch."
        }
      }
    ]
  }
}