elasticsearch 학습 노트

참고[완 일 봉:전문 검색엔진 Elasticsearch 입문 강좌]
1.설치 초기 화 환경
a.단기 개발 판 사용
#       
docker run -d --name es --restart=always \
    --net mybridge --ip=172.1.111.12 \
    -v /home/tools/elasticsearch/single/data/:/usr/share/elasticsearch/data/ \
    -e "discovery.type=single-node" \
    elasticsearch:7.7.0

b.데이터베이스 요청
시작 검사
###   info
curl -X GET http://172.1.111.12:9200
###       
curl -X GET 'http://172.1.111.12:9200/_cat/indices?v'
###       info
curl -X GET 'http://172.1.111.12:9200/_mapping?pretty=true'

중국어 단어 플러그 인 설치,데이터베이스 초기 화
docker exec -it es bash
./bin/elasticsearch-plugin install 'https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.7.0/elasticsearch-analysis-ik-7.7.0.zip'
exit
docker restart es

###        accounts
curl -X GET 'http://172.1.111.12:9200/accounts'
###     
curl -X DELETE 'http://172.1.111.12:9200/accounts'

c.색인 형식 수정
#        ,         、    
# https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-custom-analyzer.html
# https://github.com/medcl/elasticsearch-analysis-ik
curl -X PUT 'http://172.1.111.12:9200/accounts' -d '
{
    "settings" : {
        "index" : {
            "analysis.analyzer.default.type": "ik_max_word"
        }
    }
}'
#           :analyzer     ,[ik_max_word|standard]
curl -X PUT 'http://172.1.111.12:9200/accounts/_analyze' -d '
{
  "analyzer": "standard",
  "text": " ES        standard,              ,     "
}' -H 'Content-Type:application/json'

2.첨삭 검사 조작
라 이브 러 리 작성 표:색인 아래 대상 만 들 기
POST,PUT 매개 변수 -H 'Content-Type:application/json' 매개 변 수 를 주의 하 십시오.
Content-Type header [application/x-www-form-urlencoded] is not supported
#       accounts  Index,        person  Type。person     
curl -X PUT 'http://172.1.111.12:9200/accounts' -d '
{
  "mappings": {
    "person": {
      "properties": {
        "user": {
          "type": "text",
          "analyzer": "ik_max_word",
          "search_analyzer": "ik_max_word"
        },
        "title": {
          "type": "text",
          "analyzer": "ik_max_word",
          "search_analyzer": "ik_max_word"
        },
        "desc": {
          "type": "text",
          "analyzer": "ik_max_word",
          "search_analyzer": "ik_max_word"
        }
      }
    }
  }
}' -H 'Content-Type:application/json'

데이터 추가
curl -X PUT 'http://172.1.111.12:9200/accounts/person/2' -d '
{
  "user": "  ",
  "title": "   ",
  "desc": "     "
}' -H 'Content-Type:application/json'
#   
{
    "_index": "accounts",
    "_type": "person",
    "_id": "1",
    "_version": 1,
    "result": "created",
    "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
    },
    "_seq_no": 0,
    "_primary_term": 2
}
#      
curl -X PUT 'http://172.1.111.12:9200/accounts/person/2' -d '
{
  "user": "  2",
  "title": "   ",
  "desc": "     "
}' -H 'Content-Type:application/json'

b.데이터 보기
#      ,  -d  
curl -X POST 'http://172.1.111.12:9200/accounts/person' -d '{}' -H 'Content-Type:application/json'
#   
{
    "_index": "accounts",
    "_type": "person",
    "_id": "5oypSXIBsIkVNyXrn1o5",
    "_version": 1,
    "result": "created",
    "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
    },
    "_seq_no": 3,
    "_primary_term": 3
}

#       
curl -X GET 'http://172.1.111.12:9200/accounts/person/1'
#   
{"_index":"accounts","_type":"person","_id":"1","_version":1,"_seq_no":0,"_primary_term":2,"found":true,"_source":
{
  "user": "  ",
  "title": "   ",
  "desc": "     "
}}

c.데이터 삭제
curl -X DELETE 'http://172.1.111.12:9200/accounts/person/2'
#   
{
    "_index": "accounts",
    "_type": "person",
    "_id": "2",
    "_version": 2,
    "result": "deleted",
    "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
    }
}

d.데이터 업데이트
curl -X PUT 'http://172.1.111.12:9200/accounts/person/2' -d '
{
  "user": "  2",
  "title": "   ",
  "desc": "     "
}' -H 'Content-Type:application/json'
#   
{"_index":"accounts","_type":"person","_id":"2","_version":1,"result":"created","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":6,"_primary_term":3}
curl -X PUT 'http://172.1.111.12:9200/accounts/person/2' -d '
{
  "user": "  233",
  "title": "   ",
  "desc": "     "
}' -H 'Content-Type:application/json'
#   
{"_index":"accounts","_type":"person","_id":"2","_version":2,"result":"updated","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":7,"_primary_term":3}

두 번 의 반환 상황:
_버 전:증가
_seq_증가
created -> updated
3.복잡 한 조회
a.검색 목록 페이지
curl -X PUT http://172.1.111.12:9200/accounts/person/_search
#   
{
    "took": 1,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 5,
            "relation": "eq"
        },
        "max_score": 1.0,
        "hits": [{
            "_index": "accounts",
            "_type": "person",
            "_id": "1",
            "_score": 1.0,
            "_source": {
                "user": "  ",
                "title": "   ",
                "desc": "     "
            }
        }, {
            "_index": "accounts",
            "_type": "person",
            "_id": "sYynSXIBsIkVNyXrfVpX",
            "_score": 1.0,
            "_source": {
                "analyzer": "ik_max_word",
                "text": " ES        standard,              ,     "
            }
        }, {
            "_index": "accounts",
            "_type": "person",
            "_id": "5oypSXIBsIkVNyXrn1o5",
            "_score": 1.0,
            "_source": {}
        }, {
            "_index": "accounts",
            "_type": "person",
            "_id": "9IyqSXIBsIkVNyXrLVrA",
            "_score": 1.0,
            "_source": {}
        }, {
            "_index": "accounts",
            "_type": "person",
            "_id": "2",
            "_score": 1.0,
            "_source": {
                "user": "  233",
                "title": "   ",
                "desc": "     "
            }
        }]
    }
}

앞에서 Apipost 에서 의 오 작 동 으로 일부 스 팸 데이터 가 생 겼 습 니 다.
total:     ,   2 。
max_score:       ,   1.0。
hits:          。

b.일치 하 는 검색
https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-script-query.html
제목 검색 지정[=]
curl -X GET 'http://172.1.111.12:9200/accounts/person/_search'  -d '
{
    "query": {
        "bool": {
            "must": [{
                "match": {
                    "title": " "
                }
            }],
            "filter": []
        }
    }
}' -H 'Content-Type:application/json'
#   
{
    "took": 2,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 2,
            "relation": "eq"
        },
        "max_score": 0.10536051,
        "hits": [{
            "_index": "accounts",
            "_type": "person",
            "_id": "1",
            "_score": 0.10536051,
            "_source": {
                "user": "  ",
                "title": "   ",
                "desc": "     "
            }
        }, {
            "_index": "accounts",
            "_type": "person",
            "_id": "2",
            "_score": 0.10536051,
            "_source": {
                "user": "  233",
                "title": "   ",
                "desc": "     "
            }
        }]
    }
}

어량 을 늘리다
curl -X GET 'http://172.1.111.12:9200/accounts/person/_search'  -d '
{
    "query": {
        "bool": {
            "must": [{
                "match": {
                    "title": "   "
                }
            }],
            "filter": []
        }
    }
}' -H 'Content-Type:application/json'
#   
{
    "took": 5,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 2,
            "relation": "eq"
        },
        "max_score": 0.31608152,
        "hits": [{
            "_index": "accounts",
            "_type": "person",
            "_id": "1",
            "_score": 0.31608152,
            "_source": {
                "user": "  ",
                "title": "   ",
                "desc": "     "
            }
        }, {
            "_index": "accounts",
            "_type": "person",
            "_id": "2",
            "_score": 0.31608152,
            "_source": {
                "user": "  233",
                "title": "   ",
                "desc": "     "
            }
        }]
    }
}

hits.hits.score。
#  size,     
{
    "query": {"bool":{"must":[{"match":{"title":"   "}}],"filter":[]}},
    "size": 1
}

c.다 중 조건 조회
테스트 데이터
curl -X PUT 'http://172.1.111.12:9200/accounts/person/3' -d '
{
  "user": "  ",
  "title": "      ",
  "desc": "      "
}' -H 'Content-Type:application/json'

curl -X PUT 'http://172.1.111.12:9200/accounts/person/4' -d '
{
  "user": "  ",
  "title": "      ",
  "desc": "     "
}' -H 'Content-Type:application/json'

curl -X PUT 'http://172.1.111.12:9200/accounts/person/5' -d '
{
  "user": "  ",
  "title": "   123   ",
  "desc": "        "
}' -H 'Content-Type:application/json'

curl -X PUT 'http://172.1.111.12:9200/accounts/person/6' -d '
{
  "user": "  ",
  "title": "   123   ",
  "desc": "        "
}' -H 'Content-Type:application/json'
and검색 시 사용 해 야 합 니 다불 조회
### or    
curl 'http://172.1.111.12:9200/accounts/person/_search'  -d '
{
  "query" : { "match" : { "desc" : "     " }}
}' -H 'Content-Type: application/json'
#   
{
    "took": 1,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 3,
            "relation": "eq"
        },
        "max_score": 5.4819746,
        "hits": [{
            "_index": "accounts",
            "_type": "person",
            "_id": "4",
            "_score": 5.4819746,
            "_source": {
                "user": "  ",
                "title": "      ",
                "desc": "     "
            }
        }, {
            "_index": "accounts",
            "_type": "person",
            "_id": "6",
            "_score": 4.7037764,
            "_source": {
                "user": "  ",
                "title": "   123   ",
                "desc": "        "
            }
        }, {
            "_index": "accounts",
            "_type": "person",
            "_id": "5",
            "_score": 1.7504241,
            "_source": {
                "user": "  ",
                "title": "   123   ",
                "desc": "        "
            }
        }]
    }
}

###       
curl 'http://172.1.111.12:9200/accounts/person/_search'  -d '
{
  "query": {
    "bool": {
      "must": [
        { "match": { "desc": "  " } },
        { "match": { "desc": "  " } }
      ]
    }
  }
}' -H 'Content-Type: application/json'
#   
{
    "took": 1,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 2,
            "relation": "eq"
        },
        "max_score": 5.4819746,
        "hits": [{
            "_index": "accounts",
            "_type": "person",
            "_id": "4",
            "_score": 5.4819746,
            "_source": {
                "user": "  ",
                "title": "      ",
                "desc": "     "
            }
        }, {
            "_index": "accounts",
            "_type": "person",
            "_id": "6",
            "_score": 4.7037764,
            "_source": {
                "user": "  ",
                "title": "   123   ",
                "desc": "        "
            }
        }]
    }
}

불 조회 배제
query.bool: {must: [],must_not: []}

페이지 정렬
정렬 출력 sort
# sort by asc/desc
{
  "query": { "match_all": {"desc": "  "} },
  "sort": [
    { "_id": "asc" }
  ]
}

되돌아오다
{
    "took": 22,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 3,
            "relation": "eq"
        },
        "max_score": null,
        "hits": [{
            "_index": "accounts",
            "_type": "person",
            "_id": "4",
            "_score": null,
            "_source": {
                "user": "  ",
                "title": "      ",
                "desc": "     "
            },
            "sort": ["4"]
        }, {
            "_index": "accounts",
            "_type": "person",
            "_id": "5",
            "_score": null,
            "_source": {
                "user": "  ",
                "title": "   123   ",
                "desc": "        "
            },
            "sort": ["5"]
        }, {
            "_index": "accounts",
            "_type": "person",
            "_id": "6",
            "_score": null,
            "_source": {
                "user": "  ",
                "title": "   123   ",
                "desc": "        "
            },
            "sort": ["6"]
        }]
    }
}

페이지 별 출력 from-size
{
    "query": {
        "match_all": {"desc": "  "}
    },
    "sort": [{
        "account_number": "asc"
    }],
    "from": 10,
    "size": 10
}

f.유한 범위 조회
# filter.range.[    balance]: {"gte": 2000,"lte": 30000}
{
  "query": {
    "bool": {
      "must": { "match_all": {} },
      "filter": {
        "range": {
          "balance": {
            "gte": 20000,
            "lte": 30000
          }
        }
      }
    }
  }
}

총결산
조회
query.match_all
단순 조회
query.match:{필드 1:값 1,필드 2:값 2}
교차 조회
query.bool: {must: [match{}],must_not: []}
정렬 페이지
sort: [{ "_id": "asc" }]from: 10,size: 10
범 위 를 한정 하 다
filter.range.[범위 필드 balance]:{"gte":2000,"lt":30000}
공식 문서
문서 조회https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl.html
c.소결
약 정 된 JSON 배열 조 회 를 사용 하여 DDL 문 구 를 분석 하 는 시간 을 절약 합 니 다.전형 적 인 RESTFUL-API 스타일 을 사용 하여 응답 을 요청 하면 백 엔 드 작업 을 간소화 할 수 있 고 기본 기능 은 백 엔 드 개발 의 참여 가 필요 하지 않 습 니 다.

좋은 웹페이지 즐겨찾기