'2016/07/22'에 해당되는 글 2건

  1. 2016.07.22 [Elasticsearch] MoreLikeThis API 설명
  2. 2016.07.22 [Elasticsearch] Transport Bulk to Rest Bulk data format 변환

[Elasticsearch] MoreLikeThis API 설명

Elastic/Elasticsearch 2016. 7. 22. 16:21

mlt 를 이용하면 쉽게 추천 기능을 구현 할 수 있습니다.

그래서 해당 API에 대한 문서를 제 맘데로 옮겨다 놓았습니다.

추후 elasticsearch + mlt 를 이용한 machine learning 이나 recommendation 구현 방법에 대해서 공유 하도록 하겠습니다.


참고문서)

https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-mlt-query.html


API 설명)

More Like This Query

- MLT 쿼리는 주어진 문서셋과 같은 문서를 찾도록 해줍니다.

- 입력된 문서의 대표 키워드 셋을 가지고 질의 하여 결과를 리턴하게 됩니다.

- 리턴된 결과의 문서들은 대표 키워드 셋과 유사한 문서들로 구성 되게 됩니다.

- MLT 질의 시 문서 또는 키워드로 질의를 할 수 있습니다.


Parameters


Document Input Parameters

  - like

    작성된 문서 또는 text를 바탕으로 문서를 검색 합니다.

  - unlike

    작성된 문서 또는 text에서 제외 시킬 term을 작성 합니다.

  - fields

    문서에서 analyzed text 를 가져올 필드를 지정 합니다.

    이 필드를 대상으로 질의 수행이 이루어 집니다.

  - like_text

    like 와 더불어 문서를 검색 할떄 추가적으로 사용할 text를 작성 합니다.

  - ids or docs

    @deprecated


Term Selection Parameters

  - max_query_terms

    작성된 문서 또는 text에서 추출하여 사용할 최대 query term size 입니다. (default 25)

  - min_term_freq

    작성된 문서 또는 text의 최소 TF 값으로 이 값보다 작을 경우 작성된 문서와 text는 무시 됩니다. (default 2)

  - min_doc_freq

    입력된 개별 term들에 대해서 각각 matching 된 문서의 최소 크기로 해당 크기 보다 작은 term의 결과는 무시 됩니다. (default 5)

  - max_doc_freq

    입력된 개별 term들에 대해서 각각 matching 된 문서의 최대 크기로 해당 크기 보다 큰 term의 결과는 무시 됩니다. (default unbounded 0)

  - min_word_length

    입력된 개별 term들의 최소 길이로 정의한 값보다 작은 term은 무시 됩니다. (default 0)

  - max_word_length

    입력된 개별 term들의 최대 길이로 정의한 값보다 큰 term은 무시 됩니다. (default unbounded 0)

  - stop_words

    불용어 목록을 등록 합니다.

  - analyzer

    입력한 문서와 text에 대한 analyzer 를 지정 합니다. 지정 하지 않을 경우 first field 의 analyzer 를 사용하게 됩니다.


Query Formation Parameters

  - minimum_should_match

    작성된 문서 또는 text에서 추출된 term matching 에 대한 minimum_should_match 정보를 구성 합니다. (default 30%)

  - boost_terms

    tems boost value 를 지정 합니다.

  - include

    검색 결과로 입력 문서를 포함 할지 말지를 결정 합니다. (default false)

  - boost

    전체 질의에 대한 boost value 를 지정 합니다. (default 1.0)


샘플 QueryDSL)

{

  "query": {

    "more_like_this": {

      "fields": [

        "title"

      ],

      "like": "마스크 수분",

      "min_term_freq": 1,

      "min_doc_freq": 10,

      "min_word_length": 2,

      "include": true

    }

  },

  "from": 0,

  "size": 5,

  "fields": [

    "id",

    "title"

  ]

}


:

[Elasticsearch] Transport Bulk to Rest Bulk data format 변환

Elastic/Elasticsearch 2016. 7. 22. 10:02

java 로 bulk indexing 코드를 구현할 경우 색인 데이터 format을 그대로 rest bulk indexing 에서 사용을 할 수가 없습니다.

그래서 변환 하는 스크립트를 간단하게 작성해 봤습니다.


Reference)

https://www.elastic.co/guide/en/elasticsearch/reference/2.3/docs-bulk.html


Java Bulk Indexing Format)

{ "field1" : "value1" }


Rest Bulk Indexing Format)

{ "index" : { "_index" : "test", "_type" : "type1", "_id" : "1" } }

{ "field1" : "value1" }


보시면 아시겠지만 index/type/id 에 대한 meta 정보가 있느냐 없느냐의 차이 입니다.

당연하겠지만 java api 에서는 meta 정보를 set 하도록 되어 있습니다. 하지만 rest api 에서는 set 하는 과정이 없기 때문에 당연히 정보를 위와 같이 넣어 줘야 합니다.


변환 스크립트)

#!/bin/bash


while read line

do

  header="{ \"index\" : { \"_index\" : \"INDEX_NAME\", \"_type\" : \"TYPE_NAME\" } }"

  echo -e $header >> query_result.txt

  echo -e $line >> query_result.txt

done < $1


실행)

$ ./convertJavaToRestFormat.sh query_result.json


Rest Bulk Action)

$ curl -XPOST 'http://localhost:9200/INDEX_NAME/TYPE_NAME/_bulk' --data-binary "@query_result.txt"


: