kibana error

ELK/kibana2021. 1. 16. 20:56

match query  

Match Query는 텍스트, 숫자, 날짜 등이 포함된 문장을 형태소 분석을 통해 텀으로 분리한 후 이 텀들을 이용해 검색 질의를 수행

============================================================================

 

 

형태소 분석기는 nori를 사용하도록 한다.

1] nori 설치

$ ./elasticsearch-plugin install analysis-nori

설치가 잘 됬는지 확인해보자

 

2] index mapping 설정

( 왜 인지 모르겠지만 mapping 설정이 자꾸 에러나서 elasticsearch service 내렸다가 다시 올렸다. )

 

3] 데이터 insert

( 대충 요런 document를 insert 하였다. )

 

4] MatchQuery 작성

GET sample_2/_search
{
  "query": {
    "match": {
      "col": "LG"
    }
  }
}

 

 

[ 내용 추가 중 ]

 

 

 

결론] match query를 유사도 검색으로 사용하기 위해서는 적절한 형태소 분석기를 동반해서 사용해야 될 것으로 보여진다. 그렇지 않으면 해당 value값과 동일하게 일치되는 형태로 dsl 질의문을 날려야 한다. 

'ELK > elasticsearch' 카테고리의 다른 글

elasticsearch term query  (0) 2020.12.22
3노드 클러스터 엘라스틱서치 ( elasticsearch 3node)  (0) 2020.05.09
elasticsearch index mapping 에 관한 생각  (0) 2020.04.17
logstash ruby syntax  (0) 2020.04.14
logstash file stdin  (0) 2020.04.14

term query

-> 제공된 필드에 정확한 용어가 포함 된 문서를 반환합니다.

-> 검색어라는 용어를 사용하여 가격, 제품 ID 또는 사용자 이름과 같은 정확한 값을 기반으로 문서를 찾을 수 있습니다.

 

핵심은 정확하게 해당 field의 value값과 일치하여야 hit될 수 있다로 결론 지을 수 있다.

============================================================================

그럼 간단한 예제로 확인해보자

++++++++++++++++++++++++++++++++++++++++++++

sample 데이터

POST sample_index/_doc
{
  "col1": "삼성전자"
}

POST sample_index/_doc
{
  "col1": "LG전자"
}

++++++++++++++++++++++++++++++++++++++++++++

다음과 같이 쿼리를 날려보자

GET sample_index/_search
{
  "query": {
    "term": {
      "col1.keyword": {
        "value": "LG"
      }
    }
  }
}

 

결과는 일치하는 document가 없다고 나온다.

 

다음과 같이 쿼리를 날리면

GET sample_index/_search
{
  "query": {
    "term": {
      "col1.keyword": {
        "value": "LG전자"
      }
    }
  }
}

hti된 document가 결과로 나온다.

 

============================================================================

참고 Elasticsearch에서 인덱스 매핑없이 데이터를 insert하여 인덱스를 생성할 경우 string에 해당하는 column은 자동적으로 text와 keyword 타입으로 동시 매핑이 잡히게 된다.

============================================================================

 

 

'ELK > elasticsearch' 카테고리의 다른 글

elasticsearch match-query  (0) 2020.12.23
3노드 클러스터 엘라스틱서치 ( elasticsearch 3node)  (0) 2020.05.09
elasticsearch index mapping 에 관한 생각  (0) 2020.04.17
logstash ruby syntax  (0) 2020.04.14
logstash file stdin  (0) 2020.04.14

event 처리

ELK/logstash2020. 12. 22. 17:35

logstash에서 document의 특정 field 값을 얻기 위해서는 event.get("field-name")을 사용하고

document에 특정 field값을 추가 시키기 위해서는 event.set("new-field-name", value))를 넣어주면 된다.

'ELK > logstash' 카테고리의 다른 글

특정 필드의 값 변경  (0) 2020.11.30
logstash ruby 활용법  (0) 2020.07.07
logstash jdbc mssql output  (0) 2020.07.04
logstash eve_odd  (0) 2020.06.17
logstash file json absolute path  (0) 2020.06.17

'ELK > logstash' 카테고리의 다른 글

event 처리  (0) 2020.12.22
logstash ruby 활용법  (0) 2020.07.07
logstash jdbc mssql output  (0) 2020.07.04
logstash eve_odd  (0) 2020.06.17
logstash file json absolute path  (0) 2020.06.17

전체 코드

require 'elasticsearch'

class EsTest

  attr_accessor :esClient, :action_array
  def initialize
    @esClient = Elasticsearch::Client.new
    @action_array = Array.new
  end

  def totalIndex
    ## 전체 인덱스 조회
    response   = esClient.cat.indices
    if ! response.nil?
      totalIndex = response.split("\n")
      totalIndex.each_with_index do |datas,index|
        index_name = datas.split(" ")[2]

        if index_name.chars.first != "."
          ## document가 몇개 인지 확인___________________________________________________________
          total_doc_count = esClient.count index: index_name, body: {query: {match_all:{}}}

          puts " nu: #{index}"

          action_array.push({"index"=> {"_index"=> "my_total_index","_id"=> index,"data"=> {"index_name"=> index_name,"index_count"=> total_doc_count["count"]}}})
        end
      end # end of totalIndex each
      esClient.bulk body: action_array
    end # end of nil?
  end
end

def register(params)
  @es = EsTest.new
end

def filter(event)

  event.set("work_time", Time.now.strftime("%Y%m%d"))

  if event.get("result") != "es server access error"
    @es.totalIndex
    return [event]

  else
    return [event]
  end
end




 

생성자

: ruby 에서 생성자는 initialize 이름의 함수로 사용된다.

=> @esClient : elasticsearch 인스턴스

=> @action_array : Array 인스턴스 ( 코드상에서 bulk 구조로 데이터를 insert 하기 위해 선언된 부분 )

=================================================================

 

1) esClient.cat.indices 는 전체 인덱스의 목록을 리턴해준다. 

2) response.nil 은 해당 변수가 null 값인지를 물어보는 부분이다.

3) split 은 문자열을 특정 문자를 기준으로 자르게 된다.  ( 자르고 리턴된 값은 Array 이다. )

4) each_with_index 는 python 에서 enumerate 하고 동일

=================================================================

 

1) .chars.first 는 문자열에서 첫번째 문자 즉 인덱스에서 0 에 위치에 시작하는 값이다.

'ELK > logstash' 카테고리의 다른 글

event 처리  (0) 2020.12.22
특정 필드의 값 변경  (0) 2020.11.30
logstash jdbc mssql output  (0) 2020.07.04
logstash eve_odd  (0) 2020.06.17
logstash file json absolute path  (0) 2020.06.17

input {
	elasticsearch {
		hosts => "localhost:9200"
		index => "server_kimjh"
		query => '{ "query": { "match_all": {} } }'
		size   => 100
		scroll => "2m"
	}
}

output {
	stdout { codec => rubydebug }
	jdbc {
		connection_string => "jdbc:sqlserver://localhost:1433;databaseName=server_kimjh;user=kimjh;password=P@ssw0rd!"
		driver_jar_path => "C:/Users/EZFARM/Desktop/jar_/sqljdbc/sqljdbc4.jar"
		driver_class => "com.microsoft.sqlserver.jdbc.SQLServerDriver"
		unsafe_statement => true
		statement => ["INSERT INTO stu_info (stu_name, stu_age) VALUES(?,?)", "%{stu_name}", "%{stu_age}"]
	}
}

 

input 에 의해서 내려오는 결과값은 한개씩 output 으로 던진다.

 

input 부분

>curl -XGET localhost:9200/server_kimjh/_mapping?pretty
{
  "server_kimjh" : {
    "mappings" : {
      "_doc" : {
        "properties" : {
          "stu_age" : {
            "type" : "long"
          },
          "stu_name" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            }
          }
        }
      }
    }
  }
}

stu_age 의 field 타입은 long

stu_name 의 field 타입은 text

 

elasticsearch plugin

 => hosts : 노드의 개수에 따라 array로 표현하면 된다. ["https://xxx.xxx.xxx.xxx:9200", "https://xxx.xxx.xxx.xxx:9200","https://xxx.xxx.xxx.xxx:9200"]

 => query : 개인적으로 아쉬운 부분이긴한데 inline의 형태로 string 으로 입력되어야 한다.

 => size : fetch count

 => scroll : 얘는 정확히 아직 모르겠다. (pagination 처리시 필요한 것으로 일단은 파악)

 

output 부분

 jdbc output 플러그인 사용

'ELK > logstash' 카테고리의 다른 글

특정 필드의 값 변경  (0) 2020.11.30
logstash ruby 활용법  (0) 2020.07.07
logstash eve_odd  (0) 2020.06.17
logstash file json absolute path  (0) 2020.06.17
logstash input-plugin (elasticsearch)  (0) 2020.05.12

logstash eve_odd

ELK/logstash2020. 6. 17. 22:05

json file ==============================================================

{"num": 11}
{"num": 12}
{"num": 13}
{"num": 14}
{"num": 15}
{"num": 16}

 

ruby file ==============================================================

def register( params )
    #empty
end

def filter( event )
    remainder = event.get("remainder")
    if remainder == 0
        event.set("num_result", "even_number")
        return [ event ]
    else
        event.set("num_result", "odd_number" )
        return [ event ]
    end
end

 

logstash conf ==============================================================

input {

    file {
        path           => "/home/kimjh/Desktop/ruby_proj/stu_01.dir/1050.json"
        codec          => "json"
        start_position => "beginning"
        sincedb_path   => "/dev/null"
    }
}

filter {

    ruby {
        code => 'remainder = event.get("num")%2;
                 event.set("remainder", remainder)'
    }

    ruby {
        path => "/home/kimjh/Desktop/ruby_proj/stu_01.dir/1050.rb"
    }

    mutate {
        remove_field => ["@timestamp", "@version", "host", "path", "remainder"]
    }
}

output {

    stdout {
        codec => rubydebug
    }
}

 

결과 ==============================================================

'ELK > logstash' 카테고리의 다른 글

logstash ruby 활용법  (0) 2020.07.07
logstash jdbc mssql output  (0) 2020.07.04
logstash file json absolute path  (0) 2020.06.17
logstash input-plugin (elasticsearch)  (0) 2020.05.12
logstash plugin install  (0) 2020.04.15

input {
    file {
        path           => "/home/kimjh/Desktop/ela.dir/query_/n.json"
        type           => "json"
        start_position => "beginning"
        sincedb_path   => "/dev/null"
    }
}

filter {
    ruby {
        code => 'event.set("numCheck", "numberGood")'
    }
}

output {
    stdout {
        codec => rubydebug
    }
}

 

'ELK > logstash' 카테고리의 다른 글

logstash jdbc mssql output  (0) 2020.07.04
logstash eve_odd  (0) 2020.06.17
logstash input-plugin (elasticsearch)  (0) 2020.05.12
logstash plugin install  (0) 2020.04.15
logstash + app-search  (0) 2019.12.10

$ ./logstash-plugin install logstash-input-elasticsearch
Validating logstash-input-elasticsearch
Installing logstash-input-elasticsearch
Installation successful


input {
    elasticsearch {
        hosts   => ["http://x.x.x.x:9200"]
        index   => "number_"
        query   => '{"query": {"match_all": {}}}'
        docinfo => true
    }
}

filter {
    mutate {
        remove_field => ["@version", "@timestamp"]
    }
}

output {
    file {
        path => "/home/kim/Desktop/elastic/l-762/conf/result.json"
        codec => "json_lines"
    }
}

'ELK > logstash' 카테고리의 다른 글

logstash eve_odd  (0) 2020.06.17
logstash file json absolute path  (0) 2020.06.17
logstash plugin install  (0) 2020.04.15
logstash + app-search  (0) 2019.12.10
logstash + python  (0) 2019.01.12