kok202
Elastic search 실전 기본 (검색 응답, 검색 방법)

2019. 3. 24. 04:11[공부] 독서/실무 예제 Elasticsearch 검색엔진 기본

검색 응답 포맷

{

"took" : 63,

"timed_out" : false,

"_shards" : {

"total" : 5,

"successful" : 5,

"failed" : 0

},

"hits" : {

"total" : 2,

"max_score" : null,

"hits" : 

[ {

"_index" : "bank",

"_type" : "account",

"_id" : "0",

"sort": [0],

"_score" : null,

"_source" : {

"account_number":0,

"balance":16623

}

}, {

"_index" : "bank",

"_type" : "account",

"_id" : "1",

"sort": [1],

"_score" : null,

"_source" : {

"account_number":1,

"balance":39225

}

}]

}

}

출처 : https://www.elastic.co/guide/kr/elasticsearch/reference/current/gs-search-api.html


took : 검색 응답 시간

time_out : 검색이 time out 되었는지 여부

_shards : 검색을 수행한 샤드 정보

total : 검색을 수행한 총 샤드 수

successful : 검색 수행을 성공한 샤드 수

failed : 검색 수행을 실패한 샤드 수

hits

total : 검색 매칭에 성공한 도큐먼트 수

max_score : 매칭에 성공한 도큐먼트중 가장 높은 점수







Query 방식

1. Term Query

2. Match Query

3. Multi Match Query

4. Query String Query

5. Identifiers Query

6. Prefix Query

7. Range Query

8. Match All Query

9. Bool Query






1. Term Query

질의 테스트 분석하여 추출된 검색 term이 포함된 문서 검색

lowercase filter가 적용되어 있으므로 소문자 검색만 허용

{

"query" : {

"term" : {

"myJob" : ["developer", "designer"],

"minimum_match" : 1

# 검색을 원하는 필드에 원하는 term을 지정할 수 있다.

# minimum_match 설정을 통해 지정된 최소 일치하는 term의 갯수를 정할 수 있다.

}

}

}






2. Match Query

Term Query와 비슷하다.

Term Query와 다른점

1. Query String 형태로 문서를 검색 (쿼리 스트링 : http://kok202.tistory.com/admin/entry/post/?type=post)

2. Query 에 대한 분석 작업이 필요하다.


방법 1

{

"query" : {

"match" : {

"myJob" : "developer"

}

}

}


방법 2

{

"query" : {

"match" : {

"myJob" : {

"query" : "developer"

}

}

}

}






3. Multi Match Query

여러개의 필드에 하나의 쿼리를 쿼리 스트링으로 OR 검색

{

"query" : {

"multi_match" : {

"query" : "developer",

"fields" : ["myJob", "myDescription"]

}

}

}






4. Query String Query

{

"query" : {

"query_string" : {

"default_field" : "myJob",

"query" : "developer designer"

# developer AND designer 하면 AND 로 찾는다.

# AND가 없으면 기본적으로 OR 이다.

}

}

}






5. Identifiers Query

{

"query" : {

"ids" : {

"type" : "_doc",

"value" : ["blw2nSF1hwSf93", "sbwjFND1dbZwqzka2"]

# Primary key 또는 Unique key로 도큐먼트 정보를 가져온다.

}

}

}






6. Prefix Query

접두어를 보고 일치 여부에 따라 검색한다. -> 자동 완성 기능

단 이 쿼리를 수행하는 검색 대상 필드는 not_analyzed 속성으로 되어있어야한다.

{

"query" : {

"prefix" : {

"myJob" : {

"value" : "de"

}

}

}

}






7. Range Query

{

"query" : {

"range" : {

"myBalance" : {

"gte" : 1000,

"lte" : 9000

}

}

}

}






8. Match All Query

모든 Document를 불러온다.

{

"query" : {

"match_all" : {

}

}

}






9. Bool Query

복합 검색 쿼리

must = 안의 모든 쿼리들이 만족해야한다. (AND)

should = 안의 쿼리들중 최소 몇개는 만족해야한다. (OR)

must_not = 안의 쿼리에의해 발견되는 문서는 제외한다.

{

"query" : {

"bool" : {

"must" : [ {쿼리1}, {쿼리2}, {쿼리3} ... ],

"should" : [ {쿼리4}, {쿼리5}, {쿼리6} ... ],

"must_not" : [ {쿼리7}, {쿼리8}, {쿼리9} ... ],

"minimum_number_should_match" : 2

# {쿼리} 예시

# {"term" : {"myJob" : "developer"}}

}

}

}