'highlight'에 해당되는 글 2건

  1. 2013.08.23 [Elasticsearch] Highlight 기능.
  2. 2013.04.16 [elasticsearch] Core API - Search

[Elasticsearch] Highlight 기능.

Elastic/Elasticsearch 2013.08.23 16:11

[lucene]

Highlighter.java

FastVectorHighlighter.java


[elasticsearch]

PlainHighlighter.java

FastVectorHighlighter.java


실제 term 에 highlight tag 를 적용하는 건.. highlightTerm() method 입니다.

SimpleHTMLFormatter.java

GradientFormatter.java

참고하세요.


이넘들이 highlight 하기 위해서는 기본 두 개의 정보가 필요 합니다.

CharTermAttribute.java

OffsetAttribute.java


이것들이 어떻게 동작하는지는 소스코드를 보시면 되겠습니다.

간단하게는... 

1. stored 원문을 가져옵니다.

2. char term 과 offset 정보를 이용해서 원문을 재구성 합니다.

2.1 재구성 할때 highlightTerm() 에서 재구성된 term 을 만들어 줍니다.


뭐 상세한건 소스를 보시는게 건강에 좋습니다. :)

신고

'Elastic > Elasticsearch' 카테고리의 다른 글

[Elasticsearch] IndexCacheModule...  (0) 2013.09.02
[Elasticsearch] FiledMapper Default.  (0) 2013.09.02
[Elasticsearch] Highlight 기능.  (0) 2013.08.23
[Lucene] Analysis JavaDoc  (0) 2013.08.21
[Elasticsearch] 두 가지 timeout 설정..  (0) 2013.08.14
[Elasticsearch] json bulk insert.  (0) 2013.08.14
Trackback 0 : Comment 0

[elasticsearch] Core API - Search

Elastic/Elasticsearch 2013.04.16 18:43

본 문서는 개인적인 테스트와 elasticsearch.org 그리고 community 등을 참고해서 작성된 것이며,

정보 교환이 목적입니다.


잘못된 부분에 대해서는 지적 부탁 드립니다.

(예시 코드는 성능 및 보안 검증이 되지 않았습니다.)



[elasticsearch API 리뷰]

원문 링크 : http://www.elasticsearch.org/guide/reference/api/search/


[Filter]

- http://www.elasticsearch.org/guide/reference/api/search/filter/

- 실행한 query 결과를 바탕으로 filtering 할 수 있는 옵션


[Rescore]

- http://www.elasticsearch.org/guide/reference/api/search/rescore/

- search_type 이 scan 또는 count 일 경우 실행 되지 않음

- query 와 filter 를 통해서 결과를 return 함.


[Highlight]

- http://www.elasticsearch.org/guide/reference/api/search/highlighting.html

- store : yes 와 term_vector : with_positions_offsets 설정이 되어 있어야 함.

- query 생성 시 아래와 같은 속성으로 설정

highlight

    .pre_tags

    .post_tags

    .tags_schema

    .fields


[Highlighted Fragments]

{
    "query" : {...},
    "highlight" : {
        "order" : "score",
        "fields" : {
            "content" : {"fragment_size" : 150, "number_of_fragments" : 3}
        }
    } 

}

{
    "query" : {...},
    "highlight" : {
        "fields" : {
            "_all" : {},
            "bio.title" : {"number_of_fragments" : 0}
        }
    }
}

- highlight character size = fragment_size (기본 100)

- highlight size = number_of_fragments (기본 5)

- number_of_fragments=0 이면 highlight 된 전체 내용을 return 함.

- boundary characters 는

    . boundary_chars 와 boundary_max_scan 속성을 갖는다.


[Fields]

- http://www.elasticsearch.org/guide/reference/api/search/fields.html

- 검색 결과에 화면에 보여주기 위한 field 를 정의 함

- 기본 store : yes 설정이 되어야 하면 no 라면 _source  값을 load 하게 됨.


[Script Fields]

- http://www.elasticsearch.org/guide/reference/api/search/script-fields/

- http://www.elasticsearch.org/guide/reference/modules/scripting/

- 쿼리 결과에 대한 별도의 연산 작업을 통해 지정한 field 명으로 연산된 값을 return 한다.

{

"query" : { ... }, "script_fields" : { "test1" : { "script" : "doc['my_field_name'].value * 2" }, "test2" : { "script" : "doc['my_field_name'].value * factor", "params" : { "factor" : 2.0 } } } 

}


Its important to understand the difference between doc['my_field'].value and _source.my_field.


[Preference]

- http://www.elasticsearch.org/guide/reference/api/search/preference/

- 검색 요청 시 shard control 을 통해서 사용


[Term Facet]

- http://www.elasticsearch.org/guide/reference/api/search/facets/terms-facet/

{ "query" : { "match_all" : { } }, "facets" : { "tag" : { "terms" : { "field" : "tag", "size" : 10, "order" : "term" } } }

}

- tag field 에서 가장 빈번한 term(size) 10 개, ordering 은 term 으로 수행.

- ordering option 은 count, term, reverse_count, reverse_term (기본 count)


[Range Facet]

- http://www.elasticsearch.org/guide/reference/api/search/facets/range-facet/

- range facet 을 사용하기 위해서는 IndexNumericFieldData(RangeFacetExecutor.java) 를 가져야 함.

- key and value 에서는 key 는 range 비교 항목으로 사용하고, value 는 비교된 결과에 aggregate 연산(total)을 함

- script key and value 사용 가능 함

{ "query" : { "match_all" : {} }, "facets" : { "range1" : { "range" : { "key_script" : "doc['date'].date.minuteOfHour", "value_script" : "doc['num1'].value", "ranges" : [ { "to" : 50 }, { "from" : 20, "to" : 70 }, { "from" : 70, "to" : 120 }, { "from" : 150 } ] } } }

}


[Statistical Facet]

Statistical facet allows to compute statistical data on a numeric fields. The statistical data include count, total, sum of squares, mean (average), minimum, maximum, variance, and standard deviation. 

- numeric fields 에 대해서 통계적 데이터를 계산함.

- script field 와 multi field 지원 함.


[Term Stats Facet]

- term 과 statistical 조합

- size 속성의 기본 값은 10

- size 가 0 인 경우 전체 matching term 을 return 한다. (주의, 너무 많은 결과가 나올 수 있음)

- ordering 옵션은 아래와 같다.

term, reverse_term, count, reverse_count, total, reverse_total, min, reverse_min, max, reverse_max, mean, reverse_mean. Defaults to count.



신고
Trackback 0 : Comment 0