Пример #1
0
def get_request_query(params, scroll_id=None):
    queryObj = Query(params)

    if not scroll_id:
        request = {"query": {"bool": {}}}
    else:
        request = {"scroll": "1d", "scroll_id": scroll_id}

    if "query" in request:
        filter = []
        # 프로젝트 시퀀스 포함
        filter.append(queryObj.get_project_seq_query())
        # 여러 프로젝트 seq 가 들어오더라도 모두 filter keyword가 동일하므로 첫번째 project_seq만 사용.
        filter.append(
            queryObj.get_project_filter_query(
                params['project_seqs'].split(",")[0]))

        # 대상 채널
        if "channels" in params and params[
                "channels"] and params["channels"] != 'all':
            filter.append(queryObj.get_channel_query())

        # 대상 기간
        if "start_date" in params and "end_date" in params:
            filter.append(queryObj.get_period_query(params['mode']))

        request["query"]["bool"]["filter"] = filter
        request["query"]["bool"]["must"] = queryObj.get_total_dataset_query(
            params['project_seqs'])

    logger.debug("[get_request_query] Query >>> %s " % json.dumps(request))

    return request
Пример #2
0
def get_request_query(params, scroll_id=None):
    queryObj = Query(params)

    if not scroll_id:
        request = {"query": {"bool": {}}}
    else:
        request = {"scroll": "1d", "scroll_id": scroll_id}

    if "query" in request:
        filter = []
        # 프로젝트 시퀀스 포함
        filter.append(queryObj.get_project_seq_query())
        # 여러 프로젝트 seq 가 들어오더라도 모두 filter keyword가 동일하므로 첫번째 project_seq만 사용.
        filter.append(
            queryObj.get_project_filter_query(
                params['project_seqs'].split(",")[0]))

        # 대상 채널
        if "channels" in params and params[
                "channels"] and params["channels"] != 'all':
            filter.append(queryObj.get_channel_query())

        # 대상 기간
        if "start_date" in params and "end_date" in params:
            filter.append(queryObj.get_period_query(params['mode']))

        request["query"]["bool"]["filter"] = filter
        request["query"]["bool"]["must"] = queryObj.get_total_dataset_query(
            params['project_seqs'])
        '''
        request["query"]["bool"]["must"] = {
            "bool" : {
                "should" : [
                    {
                        "query_string": {
                            "fields": ["doc_title^100", "doc_content"],
                            "query" : "신한은행",
                            "default_operator" : "AND",
                            "tie_breaker" : 0.0
                        }
                    }
                ]
            }
        }
        '''

    logger.debug("[get_request_query] Query >>> %s " % json.dumps(request))

    return request
Пример #3
0
def get_documents(params, size, index, scroll_id=None):
    queryObj = Query(params)

    if not scroll_id:
        es_uri = "/" + index + "/doc/_search?scroll=1d"
        request = {"size": size, "query": {"bool": {}}}
    else:
        es_uri = "/_search/scroll"
        request = {"scroll": "1d", "scroll_id": scroll_id}

    if "query" in request:
        filter = []
        # 프로젝트 시퀀스 포함
        filter.append(queryObj.get_project_seq_query())
        filter.append(queryObj.get_project_filter_query(params['project_seq']))

        # 대상 채널
        if "channels" in params and params[
                "channels"] and params["channels"] != 'all':
            filter.append(queryObj.get_channel_query())

        # 대상 기간
        if "start_date" in params and "end_date" in params:
            filter.append(queryObj.get_period_query())

        request["query"]["bool"]["filter"] = filter

        # 데이터셋의 포함 키워드
        if "datasets" in params and params["datasets"]:
            request["query"]["bool"]["must"] = queryObj.get_dataset_query(
                params['project_seq'], params["datasets"])

    logger.debug("[get_documents] Query >>> %s " % json.dumps(request))

    es_conn = hc.HTTPConnection(es_ip, es_port, timeout=60)
    es_conn.request("POST", es_uri, json.dumps(request),
                    {"Content-type": "application/json"})
    result = es_conn.getresponse().read()

    if 'hits' in json.loads(result):
        logger.debug("[get_documents] result['hits']['total'] >>> %d" %
                     int(json.loads(result)['hits']['total']))
    else:
        logger.debug("[get_documents] result ::: " + str(result))

    return json.loads(result)