INDEX, DOCUMENT CRUD
INDEX 생성
PUT [인덱스]
PUT test_index
{
"settings": {
"analysis":{
"analyzer":{
...
},
"tokenizer":{
...
},
"filter":{
...
}
}
}
}
모든 INDEX 확인
GET _cat/indices?v
특정 INDEX 확인
GET [인덱스]?pretty
pretty는 json 형식으로 보기 위해서 추가
특정 INDEX 삭제
DELETE [인덱스]
특정 INDEX 열기
POST [인덱스]/_open
특정 INDEX 닫기
POST [인덱스]/_close
DOCUMENT 생성
PUT [인덱스]/_doc/[도큐먼트ID]
PUT test_index/_doc/test1
{
"name":"테스트1",
"content":"테스트1 내용입니다."
}
test1 도큐먼트 생성됨
POST [인덱스]/_doc
PUT test_index/_doc
{
"name":"테스트1",
"content":"테스트1 내용입니다."
}
test1 도큐먼트 생성됨
PUT, POST의 다른점은 POST는 도큐먼트ID를 입력하지 않아도 Elasticsearch에서 _id 값을 자동으로 생성함
DOCUMENT 업데이트
PUT [인덱스]/_doc/[도큐먼트ID]
PUT test_index/_doc/test1
{
"name":"테스트1",
"content":"테스트1 내용입니다."
}
같은 도큐먼트ID test1로 설정을 하면
내용이 업데이트 됩니다.
POST [인덱스]/_update/[도큐먼트ID]
POST test_index/_update/test1
{
"content":"테스트1 수정 내용입니다."
}
위의 PUT을 이용해서도 가능하나 PUT으로 할 경우 전체 도큐먼트 내용을 입력해야 함
도큐먼트의 특정 필드만 업데이트 하고 싶을 경우 _update 이용
결과를 확인하면 content 내용이 변경된걸 확인 할 수 있습니다.
DOCUMENT 조회
GET [인덱스]/_doc/[도큐먼트ID]
GET test_index/_doc/test1
DOCUMENT 삭제
DELETE [인덱스]/_doc/[도큐먼트ID]
DELETE test_index/_doc/test1
URI 검색
단건검색
GET [인덱스]/_search?q=[검색어]
GET test_index/_search?q=테스트
AND, OR, NOT 검색
GET [인덱스]/_search?q=[검색어1] AND [검색어2]
GET [인덱스]/_search?q=[검색어1] OR [검색어2]
GET [인덱스]/_search?q=[검색어1] NOT [검색어2]
GET test_index/_search?q=테스트1 AND 테스트2
GET test_index/_search?q=테스트1 OR 테스트2
GET test_index/_search?q=테스트1 NOT 테스트2
* AND, OR, NOT은 대문자 필수
특정 필드에서 검색
GET [인덱스]/_search?q=[필드명]:[검색어2]
GET test_index/_search?q=content:테스트1
QUERY 검색
Elasticsearch의 QueryDSL은 JSON형식으로 작성되어야 함
match쿼리
일치 정보 조회
단건검색
GET [인덱스]/_search
{
"query": {
"match": {
[필드명]:[검색어]
}
}
}
GET test_index/_search
{
"query": {
"match": {
"content": "테스트"
}
}
}
content 필드의 내용 중 '테스트' 키워드로 검색
OR 검색
GET [인덱스]/_search
{
"query": {
"match": {
[필드명]:[검색어1 검색어2]
}
}
}
GET test_index/_search
{
"query": {
"match": {
"content": "테스트1 테스트2"
}
}
}
content 필드의 내용 중 '테스트1'과 '테스트2' 키워드로 OR 검색
"content": "테스트1 테스트2" 에서 '테스트1'과 '테스트2' 사이의 띄어쓰기로 OR 검색됨
검색조건값설정
GET [인덱스]/_search
{
"query": {
"match": {
[필드명]: {
"query": [검색어1 검색어2],
"operator": [검색조건값]
}
}
}
}
GET test_index/_search
{
"query": {
"match": {
"content": {
"query": "테스트1 테스트2",
"operator": "and"
}
}
}
}
operator에 and, or, not을 입력해 검색조건을 변경 적용할 수 있다.
match_phrase쿼리
검색어의 순서까지 고려한 검색
slop 옵션을 통해 검색어 사이에 다른 검색어 허용 수를 설정할 수 있음
GET [인덱스]/_search
{
"query": {
"match_phrase": {
[필드명]:[검색어1] [검색어2]
}
}
}
GET test_index/_search
{
"query": {
"match_phrase": {
"content": "테스트1 테스트2"
}
}
}
GET [인덱스]/_search
{
"query": {
"match_phrase": {
[필드명]:[검색어1] [검색어2],
"slop": 1
}
}
}
GET test_index/_search
{
"query": {
"match_phrase": {
"content": "테스트1 테스트2",
"slop": 1,
}
}
}
slop: 1 설정으로 검색어 '테스트1'과 '테스트2' 사이에 다른 검색어 1개 허용
query_string쿼리
URI검색의 q파라미터 이용과 같음
JSON 본문에 query_string을 이용해서 검색
일반적인 검색을 할 경우
AND, OR, NOT 사용 가능
GET test_index/_search
{
"query": {
"query_string": {
"default_field": [필드명],
"query": "[검색어1] AND [검색어2]"
}
}
}
GET test_index/_search
{
"query": {
"query_string": {
"default_field": "content",
"query": "테스트1 AND 테스트2"
}
}
}
match_phrase 처럼 검색을 할 경우 \" 따옴표 안에 검색어 입력
GET test_index/_search
{
"query": {
"query_string": {
"default_field": [필드명],
"query": \"[검색어1] [검색어2]\""
}
}
}
GET test_index/_search
{
"query": {
"query_string": {
"default_field": "content",
"query": "\"테스트1 테스트2\""
}
}
}
복합적으로 검색할 경우
GET test_index/_search
{
"query": {
"query_string": {
"default_field": [필드명],
"query": "([검색어1] AND [검색어2]) OR \"[검색어3] [검색어4]\""
}
}
}
GET test_index/_search
{
"query": {
"query_string": {
"default_field": "content",
"query": "(테스트1 AND 테스트2) OR \"테스트3 테스트4\""
}
}
}
Bool 검색
블라블라 작성예정
Range 검색
블라블라 작성예정
'프로그래밍 > ElasticSearch' 카테고리의 다른 글
Elasticsearch _termvectors (0) | 2020.08.28 |
---|---|
Elasticsearch 특징 (0) | 2020.08.26 |
Elasticsearch 7.9 + Kibana 7.9 설치 및 실행 (0) | 2020.08.26 |
Elasticsearch 설치 (0) | 2016.07.18 |