Elasticsearch 2.20 숨겨진 내용 조회

Elasticsearch에는 중첩된 구조와 부자 구조가 있습니다. 이 두 구조에서 서로 다른 범위의 조회를 통해 서로 다른 문서를 검색할 수 있습니다.상위/하위 상황에서 하위 문서의 내용을 조회하여 상위 문서로 돌아가거나 상위 문서 조회를 통해 하위 문서로 돌아갈 수 있습니다.중첩된 문서의 경우 중첩된 내부의 객체 질의를 통해 중첩된 문서를 찾을 수 있습니다.
이 두 가지 상황에서 되돌아오는 실제 일치하는 내용은 숨겨져 있다.그러나 어떤 경우에는 실제 일치하는 내용을 이해하는 것이 매우 유용하다.이런 상황에서 innerhits 조회를 사용해야 합니다.
요청: PUThttp://127.0.0.1:9200/secilog
{
  "mappings": {
    "weblog": {
      "properties": {
        "message": {
          "type": "string",
          "index": "analyzed"
        },
        "apache": {
          "type": "nested",
          "properties": {
            "method": {
              "type": "string",
              "index": "not_analyzed"
            },
            "status": {
              "type": "string",
              "index": "not_analyzed"
            }
          }
        }
      }
    }
  }
}

그리고 우리는 기록을 하나 삽입한다.
요청: POSThttp://127.0.0.1:9200/secilog/weblog/1
매개변수:
{
    "message": "58.240.83.67 - - [16/Feb/2016:12:58:47 +0800] \"POST /copyright/check HTTP/1.1\" 200 2", 
    "apache": [
        {
            "method": "POST", 
            "status": "200"
        }
    ]
}

우리는 중첩된 조회를 통해 안의 문서를 조회한다.
요청: POSThttp://127.0.0.1:9200/secilog/weblog/_search/
매개 변수
{
  "query": {
    "nested": {
      "path": "apache",
      "query": {
        "bool": {
          "must": [
            {
              "term": {
                "apache.method": "POST"
              }
            }
          ]
        }
      }
    }
  }
}

반환 결과:
{
    "took": 11, 
    "timed_out": false, 
    "_shards": {
        "total": 5, 
        "successful": 5, 
        "failed": 0
    }, 
    "hits": {
        "total": 1, 
        "max_score": 1, 
        "hits": [
            {
                "_index": "secilog", 
                "_type": "weblog", 
                "_id": "1", 
                "_score": 1, 
                "_source": {
                    "message": "58.240.83.67 - - [16/Feb/2016:12:58:47 +0800] \"POST /copyright/check HTTP/1.1\" 200 2", 
                    "apache": [
                        {
                            "method": "POST", 
                            "status": "200"
                        }
                    ]
                }
            }
        ]
    }}

저희가 파라미터를 넣었을 때 inner_hits 요청 후:
{
  "query": {
    "nested": {
      "path": "apache",
      "query": {
        "bool": {
          "must": [
            {
              "term": {
                "apache.method": "POST"
              }
            }
          ]
        }
      },
      "inner_hits": {
        "from": 0,
        "size": 10
      }
    }
  }
}

반환 결과는 다음과 같습니다.
{
    "took": 13, 
    "timed_out": false, 
    "_shards": {
        "total": 5, 
        "successful": 5, 
        "failed": 0
    }, 
    "hits": {
        "total": 1, 
        "max_score": 1, 
        "hits": [
            {
                "_index": "secilog", 
                "_type": "weblog", 
                "_id": "1", 
                "_score": 1, 
                "_source": {
                    "message": "58.240.83.67 - - [16/Feb/2016:12:58:47 +0800] \"POST /copyright/check HTTP/1.1\" 200 2", 
                    "apache": [
                        {
                            "method": "POST", 
                            "status": "200"
                        }
                    ]
                }, 
                "inner_hits": {
                    "apache": {
                        "hits": {
                            "total": 1, 
                            "max_score": 1, 
                            "hits": [
                                {
                                    "_index": "secilog", 
                                    "_type": "weblog", 
                                    "_id": "1", 
                                    "_nested": {
                                        "field": "apache", 
                                        "offset": 0
                                    }, 
                                    "_score": 1, 
                                    "_source": {
                                        "method": "POST", 
                                        "status": "200"
                                    }
                                }
                            ]
                        }
                    }
                }
            }
        ]
    }
}

귀환 결과에서 알 수 있듯이 이전에 숨겨진 정보가 모두 드러났다._nested 키워드는 위의 예에서 매우 중요합니다. 왜냐하면 내부에 끼워 넣은 대상 조회를 어디서 얻을 수 있는지 정의하기 때문입니다.
inner_hits에서 지원하는 매개 변수:
from: 적중의 시작 위치 검색하기;
size: 검색한 문서의 갯수;
sort: 필드 정렬;
name: 응답에서 특수 내부 명중 정의에 사용되는 이름입니다. 한 검색에서 여러 개의 내부 숨김 검색 (innerhits) 을 정의할 때 유용합니다.
세크랜드(secisland)는 Elasticsearch의 최신 버전의 각종 기능을 점차적으로 분석할 것이니 기대해 주십시오.secisland 공중호에 가입하여 관심을 가지는 것도 환영합니다.

좋은 웹페이지 즐겨찾기