● Term
term은 색인이 나눠지면서 형태소로 나누어지는 저장되는 토큰등을 term이라고 합니다.
term 쿼리는 주어진 질의문과 저장된 텀과 정확히 일치하는 문장을 찾습니다.
모든 대문자는 소문자로 변형되고, 중복된 단어는 삭제됩니다.
{
"query": {
"term": {
"url": "/manage/newpost"
}
}
}
● Terms
2개 이상의 term을 같이 검색하려면 terms 쿼리를 이용합니다.
필드의 값은 항상 배열로 전달해야 합니다.
{
"query": {
"terms": {
"url": ["/manage/newpost", "/manage/view", "/blog/create"],
"minium_should_match": 2
}
}
}
* minium_should_match: 몇 개 이상의 term과 일치해야 검색 결과에 시킬지 설정
즉, 위에서는 3개중 2개이상만 일치하면 검색결과 노출되도록 하였습니다.
● range
range 쿼리는 range : { <필드명>: { <파라메터>:<값> } } 으로 입력됩니다.
range 쿼리 파라메터는 아래의 4가지가 있습니다.
* gte (Greater-than or equal to) - 이상 (같거나 큼) |
다음은 age필드 값이 15이상, 31미만인 데이터를 검색하는 쿼리입니다.
age 값이 15 이상 31 미만인 데이터 검색
{
"query": {
"range": {
"age": {
"gte": 15,
"lt": 31
}
}
}
}
● match
match 쿼리도 term 쿼리와 마찬가지로 주어진 질의문을 색인된 term과 비교해서 일치하는 도큐먼트를검색하는 질의. 다만 term 쿼리와 다르게 match 쿼리에서는 주어진 질의문 또한 형태소 분석을 거친 뒤분석된 질의문으로 검색을 수행합니다. 예를 들면 The And로 검색하면 매치 쿼리는 이 질의문을 형태소 분석을 거쳐서 the and로 질의문을 바꾸고 이 값을 term과 비교해서 검색합니다.
그리고 기본적으로 match에 들어가는 데이터들은 or 검색으로 진행됩니다.
다시말하면 아래의 예에서는 Seoul 또는 Gangnam 또는 Nonhyeon라는 term으로 검색합니다.
이것을 and로 바꾸고 싶은 경우에는 "operator" : "and" 옵션을 넣어주어야 합니다.
{
"query": {
"match": {
"address": "Seoul Gangnam Nonhyeon"
}
}
}
operator 적용
{
"query": {
"match": {
"address": {
"address": "Seoul Gangnam Nonhyeon"
"operator" : "and"
}
}
}
}
● match_phrase
구문 전체와 일치하는 도큐먼트를 검색합니다.
{
"query": {
"match_phrase": {
"title": "Hello elasticsearch"
}
}
}
● multi_match
여러 필드에 대한 조건을 검색할 때 price와 age 필드에서 값을 조회합니다.
{
"query": {
"multi_match": {
"fields": ["price", "age"],
"query": 30
}
}
}
● query_string
URL 검색에서 query 매개변수에 다양한 질의문을 사용해서 검색을 수행했던 방식과 동일하게 사용할수 있는 방식입니다.
여러 필드의 조건으로 검색 가능합니다.
{
"query": {
"query_string": {
"default_field": "address",
"query": "Seoul Gangnam"
}
}
}
● Bool Query
조건문인 불 조합으로 적용해서 최종 검색 결과를 찾아낼 수 있습니다.
bool 조건에는 must, must_not, should가 존재합니다.
* must : 반드시 매칭되는 조건, score에 영향을 준다. |
{
"query": {
"bool": {
"should": [
{
"wildcard": {
"adress": "*Seoul*"
}
},
{
"match": {
"adress": "Seoul"
}
}
],
"must": {
"match": {
"age": 22
}
},
"filter": {
"range": {
"time": {
"gte": "2020-12-10 00:00:00",
"lte": "2020-12-11 23:59:59",
"format": "yyyy-MM-dd HH:mm:ss"
}
}
}
}
}
Ref : jonnung.dev/elasticsearch/2018/05/08/elasticsearch-search-api-query-dsl-summary/
'Dev. Back-End > Big Data' 카테고리의 다른 글
[빅데이터] Mac OS에서 elasticsearch(엘라스틱서치) 간단하게 설치하는 방법 (0) | 2020.09.06 |
---|---|
Elasticsearch란? (개념 및 종류, RDBMS와 차이) (1) | 2020.09.02 |