728x90
ES 조회쿼리는 몇 번만 조회해보면 간단하게 알 수 있다.
{
"size": 1000, //검색 결과 개수 지정
"query": { //검색 쿼리
"bool": {
"must": [ //검색 결과에 포함 되야 할 조건 쿼리
{
"script": {
"script": {
"source": "InternalQlScriptUtils.nullSafeFilter(InternalQlScriptUtils.and(InternalQlScriptUtils.gte(InternalSqlScriptUtils.left(InternalQlScriptUtils.docValue(doc.params.str),params.len),params.start),InternalQlScriptUtils.lte(InternalSqlScriptUtils.left(InternalQlScriptUtils.docValue(doc,params.str),params.len),params.end)))",
"lang": "painless",
"params": {
"str": "startDate.keyword",
"len": 8, //아래 start end param의 길이
"start": "20201212",
"end": "20201213"
}
},
"boost": 1 //둘 이상의 쿼리가 포함된 검색에 대한
} // 관련성 점수(기본값 1.0 0~1사이의 값은 관련성 점수를 낮추고 높으면 올라감)
},
{
"range": {
"startDate": { //범위조회
"gte": 20211018,
"lte": 20211019
}
}
},
{
"exists": { //해당 필드가 존재유무
"field": "userId", //(값이 null 혹은 []일 경우 존재하지 않음으로 간주)
"boost": 1
}
},
{
"term": { // 해당 필드의 해당 value 검색
"userId": {
"value": 1,
"boost": 1
}
}
},
{
"term": {
"username.keyword": { // value 타입이 빈칸이 포함 될 수있는 Text형식이면 이면 필드명.keyword
"value": "user1", // 혹은 match 쿼리가 적절
"boost": 1
}
}
},
{
"wildcard": {
"username": { // *을 사용해 value가 포함된 검색결과 조회
"value": "user*",
}
}
}
],
"must_not": [ //포함되지 않아야 할 조건 입력 쿼리
{
"terms": { // 여러값 검색 조건
"apiKey.keyword": [
"aaa",
"bbb",
"ccc"
],
"boost": 1
}
}
]
}
},
"sort": [ //검색 결과 정렬
{
"timestamp.keyword": {
"order": "desc"
}
}
],
"aggregations": { //검색 결과 group by
"groupby": {
"composite": {
"size": 1000,
"sources": [
{
"groupby_name": { //해당조건 시 apiKey 결과 표시
"terms": {
"field": "apiKey.keyword",
"missing_bucket": true,
"order": "asc"
}
}
}
]
}
}
},
"agg": {
"중복제거카운트": { //중복값제거한 고유값에 대한 카운트
"cardinality": {
"field": "shoppingList.keyword"
}
}
}
}
쿼리 내용중에 필요한 부분만 중괄호{} 앞뒤로 잘 잘라서 쿼리에 이어붙이면서 써보면 확인 가능 할 것이다.
728x90
'개발관련' 카테고리의 다른 글
| Git 원격 저장소 이름 바꾸기 (0) | 2023.11.24 |
|---|---|
| GitLab설치 (0) | 2023.08.08 |
| Ubuntu 우분투 초기 셋팅 히스토리 (0) | 2023.08.08 |
| 성능테스트 (0) | 2023.08.08 |
| 리눅스마스터2급 족보 (0) | 2023.08.08 |