Elasticsearch 시리즈 7: 일반적인 사용 설명서

앞의 몇 편의 글은 검색엔진 ElasticSearch의 내부 원리를 소개했는데 이 글은 ElasticSearch의 사용 과정에서 흔히 볼 수 있는 용법을 정리했다.

1. 클러스터 정보 보기


ElasticSearch는 다음과 같이 클러스터 건강 정보를 확인합니다.

1.1, 클러스터 상태 보기


ElasticSearch 클러스터 상태 보기 명령:curl 'localhost:9200/_cat/health?v'
그 중에서status는 녹색으로 모든 것이 정상이고, 노란색은 모든 데이터가 사용할 수 있지만 일부 복사본은 아직 분배되지 않았으며, 빨간색은 일부 데이터가 어떤 이유로 사용할 수 없음을 나타낸다.

1.2, 색인 분할 보기


ElasticSearch 색인 분할 보기 명령:curl 'localhost:9200/_cat/shards?v'
예를 들어 두 개의 인덱스가 있는데 그것이 바로people과product입니다. 그들은 각각 하나의 주분편과 아직 분배되지 않은 부분편을 가지고 있습니다.

1.3, 노드 정보 보기


ElasticSearch 노드 정보 보기 명령:
  • 마스터:curl 'localhost:9200/_cat/master?v'
  • 모든 노드:curl 'localhost:9200/_cat/nodes?v'

  • 2. 색인 관련 명령


    2.1, 색인 만들기


    ElasticSearch 색인 명령 만들기
    7.0 버전은 type의 개념을 없앴다.

    2.1.1, 7.0 이전 버전 색인 만들기

    curl -X PUT 'localhost:9200/product' -H 'Content-Type: application/json' -d '
    {
      "mappings": {
        "type_name": {
          "properties": {
            "price": {
              "type": "integer"
            },
            "name": {
              "type": "text"
            }
          }
        }
      }
    }'

    2.1.2, 7.0 및 그 이후의 버전에 대한 색인 만들기

    curl -X PUT 'localhost:9200/product' -H 'Content-Type: application/json' -d '
    {
      "mappings": {
          "properties": {
            "price": {
              "type": "integer"
            },
            "name": {
              "type": "text"
            }
          }
        }
    }'

    2.2 쿼리 인덱스


    ElasticSearch는 모든 색인 명령을 조회합니다.curl 'localhost:9200/_cat/indices?v'
    위의 예에서 볼 수 있듯이 집단에 두 개의 색인이 있다.그들의 이름은 각각people,product이다.그리고 각각 주분편과 부분편이 있다.

    2.3, 검색 인덱스 구조


    2.3.1 모든 인덱스 맵핑 데이터 구조 보기


    ElasticSearch 쿼리 색인 매핑 구조 명령:curl 'localhost:9200/_mapping?pretty'
    위의 예는 색인people과 제품의mapping 데이터 구조를 조회했습니다.

    2.3.2 지정된 인덱스mapping 데이터 구조 보기


    2.3.2.1, 7.0 이전 버전
    인덱스 이름이 indexName이고 type 이름이 typeName인 인덱스 매핑 데이터 구조를 보려면 다음과 같이 하십시오.curl -XGET "127.0.0.1:9200/indexName/typeName/_mapping?pretty"
    2.3.2.2, 7.0 및 그 이후 버전
    인덱스 이름이 indexName인 인덱스 매핑 데이터 구조를 보려면 다음과 같이 하십시오.curl -XGET "127.0.0.1:9200/indexName/_mapping?pretty"

    2.4, 색인에 필드 추가


    ElasticSearch 색인에 필드 명령 추가

    2.4.1, 7.0 이전 버전

    curl -XPOST "127.0.0.1:9200/indexName/typeName/_mapping?pretty" -H 'Content-Type: application/json' -d '{
     "typeName": {
                "properties": {
                     "tags":{
                        "type":"text"
                   }
                }
            }
    }'

    위의 예는 인덱스 이름이 indexName이고 type 이름이 typeName인 맵핑 데이터 구조에 tags 필드를 추가하는 것을 나타냅니다.

    2.4.2, 7.0 및 그 이후 버전

    curl -XPOST "127.0.0.1:9200/product/_mapping?pretty" -H 'Content-Type: application/json' -d '{
        "properties": {
             "tags":{
                "type":"text"
           }
        }
    }'

    위의 예는 색인 이름이 제품인mapping 데이터 구조에 tags 필드를 추가하는 것을 나타낸다

    2.5, 색인에서 필드 삭제


    ElasticSearch는 현재 지원되지 않습니다.

    2.6, 인덱스 삭제


    ElasticSearch 색인 제거 명령.curl -X DELETE 'localhost:9200/product'
    위의 예는 제품이라는 인덱스를 삭제하는 것을 나타낸다.

    3. 데이터 문서 검색 쿼리 관련 명령


    아래에 언급된 데이터는 색인 중의 문서입니다.

    3.1 데이터 쓰기 명령


    ElasticSearch 데이터 쓰기 명령.
    7.0 버전은 type의 개념을 없앴다.

    3.1.1, 7.0 이전 버전 쓰기

    curl -X PUT 'localhost:9200/product/type_name/1' -H 'Content-Type: application/json' -d '
    {
        "price":1,
        "name":" "
    }'

    3.1.2, 7.0 및 이후 릴리즈에서 데이터 쓰기

    curl -X PUT 'localhost:9200/product/_doc/1' -H 'Content-Type: application/json' -d '
    {
        "price":1,
        "name":" "
    }'

    3.2 쿼리 데이터 검색 명령


    ElasticSearch 데이터 검색 명령

    3.2.1, 7.0 이전 버전 검색 데이터


    3.2.1.1 키 검색curl -X GET 'localhost:9200/product/type_name/1?pretty'
    3.2.1.2 키워드 검색
    curl -X GET 'localhost:9200/product/_search?pretty' -H 'Content-Type: application/json' -d '
    {
      "query": {
        "match": {
          "name": " "
        }
      },
      "from":0,
      "size":1
    }'

    3.2.2, 7.0 및 그 이후의 버전 검색 데이터


    3.2.2.1 키 검색curl -X GET 'localhost:9200/product/_doc/1?pretty'
    3.2.2.2 키워드 검색
    curl -X GET 'localhost:9200/product/_search?pretty' -H 'Content-Type: application/json' -d '
    {
      "query": {
        "match": {
          "name": " "
        }
      },
      "from":0,
      "size":1
    }'

    3.2.3 다중 값에 대한 필드 검색


    쿼리name에는'애플'이 포함되어 있고 tags에는'애플'또는'후지산'의 문서 데이터가 있습니다.
    curl -X GET 'localhost:9200/product/_search?pretty' -H 'Content-Type: application/json' -d '{
        "query":{
            "bool":{
                "must":[
                    {
                        "bool":{
                            "should":[
                                {"match":{"name":" "}},
                                {"terms": {"tags": [" "," "]}}
                            ]
                        }
                    }
                ]
            }
        },
        "sort":{
            "_score":{"order":"desc"}
        },
        "from":0,
        "size":10
    }'

    3.2.4, 다중 필드 공동 조회


    쿼리name에는 "애플"및 price 1의 문서 데이터가 포함되어 있습니다.
    curl -X GET 'localhost:9200/product/_search?pretty' -H 'Content-Type: application/json' -d '{
        "query":{
            "bool":{
                "must":[
                    {
                        "bool":{
                            "should":[
                                {"match":{"name":" "}},
                                {"match":{"price":1}}
                            ]
                        }
                    }
                ]
            }
        },
        "sort":{
            "_score":{"order":"desc"}
        },
        "from":0,
        "size":10
    }'

    3.3 데이터 업데이트 명령


    ElasticSearch에서 데이터 업데이트 명령:
    curl -X PUT 'localhost:9200/product/_doc/1' -H 'Content-Type: application/json' -d '
    {
        "price":1,
        "name":" ",
        "tags":[" "," "," "]
    }'

    3.4, 데이터 삭제


    ElasticSearch에서 문서 데이터 삭제 명령:

    3.4.1, 7.0 이전 버전


    문서 삭제curl -XDELETE 'http://localhost:9200/indexName/typeName/1'
    위의 예는 색인 이름이 indexName이고 type 이름이 typeName인 색인에서 문서 ID가 1인 문서를 삭제합니다.

    3.4.2, 7.0 및 그 이후의 버전

    curl -XDELETE 'http://localhost:9200/indexName/_doc/1'

    4. ElasticSearch에서 분사기 분석기가 명령줄에서 사용하는 방법


    ElasticSearch는 서로 다른 단어 플러그인을 지원합니다. 다음 예에서 우리는 analysis-ik 단어 플러그인을 사용했습니다.
    ElasticSearch의 API 인터페이스를 통해 서로 다른 분사기의 분사 결과를 분석할 수 있습니다.구체적인 단계는 다음과 같다.

    4.1, 두 문자 유형의 필드를 추가하고 다른 분사기를 지정합니다.

    curl -XPOST "127.0.0.1:9200/product/_mapping?pretty" -H 'Content-Type: application/json' -d '{
        "properties": {
            "pNameIkMaxWord":{
                "type":"text",
                "analyzer":"ik_max_word"
            },
            "pNameIkSmart":{
                "type":"text",
                "analyzer":"ik_smart"
            }
        }
    }'

    4.2, ik_ 사용max_단어 분사 분석

    curl -XPOST 'http://localhost:9200/product/_analyze?pretty' -H 'Content-Type: application/json' -d '
    {
        "field": "pNameIkMaxWord",
        "text": " "
    }'

    분사 결과는 다음과 같습니다.
    {
      "tokens" : [
        {
          "token" : " ",
          "start_offset" : 0,
          "end_offset" : 7,
          "type" : "CN_WORD",
          "position" : 0
        },
        {
          "token" : " ",
          "start_offset" : 0,
          "end_offset" : 4,
          "type" : "CN_WORD",
          "position" : 1
        },
        {
          "token" : " ",
          "start_offset" : 0,
          "end_offset" : 2,
          "type" : "CN_WORD",
          "position" : 2
        },
        {
          "token" : " ",
          "start_offset" : 1,
          "end_offset" : 3,
          "type" : "CN_WORD",
          "position" : 3
        },
        {
          "token" : " ",
          "start_offset" : 2,
          "end_offset" : 7,
          "type" : "CN_WORD",
          "position" : 4
        },
        {
          "token" : " ",
          "start_offset" : 2,
          "end_offset" : 4,
          "type" : "CN_WORD",
          "position" : 5
        },
        {
          "token" : " ",
          "start_offset" : 4,
          "end_offset" : 7,
          "type" : "CN_WORD",
          "position" : 6
        },
        {
          "token" : " ",
          "start_offset" : 4,
          "end_offset" : 6,
          "type" : "CN_WORD",
          "position" : 7
        },
        {
          "token" : " ",
          "start_offset" : 6,
          "end_offset" : 7,
          "type" : "CN_CHAR",
          "position" : 8
        },
        {
          "token" : " ",
          "start_offset" : 7,
          "end_offset" : 9,
          "type" : "CN_WORD",
          "position" : 9
        }
      ]
    }

    4.3, ik_ 사용smart 분사 분석

    curl -XPOST 'http://localhost:9200/product/_analyze?pretty' -H 'Content-Type: application/json' -d '
    {
        "field": "pNameIkSmart",
        "text": " "
    }'

    분사 결과는 다음과 같습니다.
    {
      "tokens" : [
        {
          "token" : " ",
          "start_offset" : 0,
          "end_offset" : 7,
          "type" : "CN_WORD",
          "position" : 0
        },
        {
          "token" : " ",
          "start_offset" : 7,
          "end_offset" : 9,
          "type" : "CN_WORD",
          "position" : 1
        }
      ]
    }

    시리즈

  • ElasticSearch 시리즈 1: 원본 컴파일과 디버그 환경 구축
  • ElasticSearch 시리즈 2: 시작 과정 상세
  • Elasticsearch 시리즈 3: 색인 생성 과정 상세
  • Elasticsearch 시리즈 4: 검색 과정 상세
  • Elasticsearch 시리즈 5: 검색 관련성 정렬 알고리즘 상세
  • Elasticsearch 시리즈 6: ES의 역렬 인덱스
  • Elasticsearch 시리즈 7: 흔한 용법 안내서

  • https://elasticsearch.cn/arti... ↩

    좋은 웹페이지 즐겨찾기