[Elasticsearch] 인덱스 검색 방법(Search API)
📋Search API
_serach는 검색 작업을 하겠다는 행동을 의미합니다.
그리고 어떻게 검색을 할 것인지에 대한 조건( 쿼리 )들을 명시를 해줘야 원하는 정보들을 얻을 수 있습니다.
엘라스틱서치에서 검색은 인덱스 또는 타입 단위로 수행됩니다.
검색은 타입, 인덱스, 그리고 여러 개의 인덱스를 묶어서 멀티 인덱스 범위로 검색할 수 있습니다.
여러 인덱스를 묶어서 처리하는 엘라스틱서치의 특징을 멀티 테넌시(Multi Tenancy)라고 합니다.
도큐먼트는 그 자체가 1개의 최소 데이터 단위이므로 도큐먼트 단위로 검색한다는 것은 성립되지 않습니다.
조건 방법은 2가지가 있습니다.
- URL에 파라미터를 넘기는 방법 ( URI Search )
- json 파일에 쿼리를 작성하여 POST 방식으로 넘기는 방법 ( Query DSL )
이 중에서 후자의 방법을 더 많이 사용합니다.
그 이유는 URL이 깔끔해지고, 더 상세한 표현이 가능할 뿐더러 재사용이 가능하기 때문입니다.
다음은 abcmrt 인덱스 안의 shoose 도큐먼트에서 nike를 검색한 내용입니다.
# http://localhost:9200/abcmrt/shoose/_search?q=nike
위와 같이 검색하고자 하는 인덱스와 타입을 uri로 줌과 동시에 이후에 _search를 붙이고
검색하고자 하는 쿼리(질의)를 params의 q로 주면 됩니다.
📌URI Search
엘라스틱서치의 두 가지 주요 검색 방법 중 먼저, URI Search는 http 주소에 검색할 명령을 매개변수 형식으로 포함해서 호출하는 검색입니다.
리퀘스트 바디 검색과 비교해서 사용 방법은 간단하지만 복잡한 질의(쿼리)를 입력하기 어려운 단점이 있습니다.
특정 필드에서만 검색하기
특정 필드만 검색하려면 q 매개변수에 필드명:질의어 형태로 값을 입력합니다.
특정 필드에 값 두 개 이상이 동시에 들어간 값을 찾는 명령을 하고 싶다면 조건 명령어 q매개변수에 AND 또는 OR 값을 공백과 함께 넣어 지정할 수 있습니다.
- q : 질의 명령을 입력하는 가장 기본적인 검색 매개변수(parameter)
- df : q 질의에 필드명을 넣는 대신 df 매개변수를 통해 검색할 필드를 지정
# http://localhost:9200/abcmrt/_search?q=nike&df=shoose
📍데이터 본문 검색
엘라스틱서치에서 검색할 조건을 JSON 데이터 형식의 질의로 입력해서 사용할 수 있습니다.
이러한 방식의 검색을 data body 검색이라고 하며 URI 검색보다 좀 더 복잡한 형식으로 검색할 수 있습니다.
리퀘스트바디 검색은 엘라스틱서치의 질의 언어인 QueryDSL을 사용합니다.
GET test/_search
{
"query": {
"match": {
"field": "value"
}
}
}
다음 포스팅에서는 엘라스틱 검색에 대한 부분을 다뤄보겠습니다.
🔗참조
https://esbook.kimjmin.net/04-data/4.4-_search
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-search.html