'Filter'에 해당되는 글 16건

  1. 2017.03.15 [미미박스 검색이야기] 검색 결과 페이지 내 상세필터 기능 개선 되었습니다.
  2. 2016.04.22 [Elasticsearch] Analyzer filter 구성 시 순서.
  3. 2016.02.23 [Elasticsearch] Delimited Payload Token Filter
  4. 2014.06.10 [Elasticsearch] qeuries, filters 에 대해..
  5. 2013.09.04 [elasticsearch] filter & facet 사용 시 주의 사항.
  6. 2013.04.16 [elasticsearch] Core API - Search

[미미박스 검색이야기] 검색 결과 페이지 내 상세필터 기능 개선 되었습니다.

ITWeb/미미박스검색이야기 2017. 3. 15. 16:46

오랜만에 미미박스 검색이야기를 올립니다.

기존에 제공 하던 narrow down 검색 방식에서 좀 더 고객 사용 편의를 위해 각 필터 항목별 종속 관계를 풀었습니다.

이유는 여러가지가 있겠지만 좀 더 많은 조건의 필터를 자유롭게 사용하도록 유도 하고 원하는 조건의 상품을 모아서 볼 수 있도록 하려는 의도였는데 잘 표현 되었는지 모르겠습니다. ^^;



[구경하기]



PC 웹에서는 이전 UI와 다르게 변경이 되어 있고 가격 필터 기능이 없었는데 추가 되었습니다.

모바일은 기존 narrow down 검색 방식에서 종속 관계만 기능적으로 정리해서 적용 되었습니다.

모바일도 검색상세필터 UI에 대한 개선이 필요 한데 이건 추후 빠르게 진행해 보도록 하겠습니다.


※ 본 글은 회사의 입장과는 전혀 상관이 없으며 개인적인 의견으로 작성된 글 임을 알려 드립니다.

:

[Elasticsearch] Analyzer filter 구성 시 순서.

Elastic/Elasticsearch 2016. 4. 22. 11:42

아주 기본적인 내용인데 간혹 놓치고 가는 경우가 있어서 기록해 봅니다.

저 같은 경우는 synonyms 적용하면서 당연히 적용된 줄 알고 테스트 하다 삽질한 경우 입니다.


analyzer 구성은 잘 아시겠지만 settings 에서 수행하게 됩니다.

그리고 설정한 analyzer 를 mappings 에서 사용을 하게 되구요.


설정 방법에 대해서는 아래 문서 참고 하시기 바랍니다.


참고문서)

https://www.elastic.co/guide/en/elasticsearch/reference/2.3/analysis.html


참고문서 내 설정 예시)

index : analysis : analyzer : standard : type : standard stopwords : [stop1, stop2] myAnalyzer1 : type : standard stopwords : [stop1, stop2, stop3] max_token_length : 500 # configure a custom analyzer which is # exactly like the default standard analyzer myAnalyzer2 : tokenizer : standard filter : [standard, lowercase, stop] tokenizer : myTokenizer1 : type : standard max_token_length : 900 myTokenizer2 : type : keyword buffer_size : 512 filter : myTokenFilter1 : type : stop stopwords : [stop1, stop2, stop3, stop4] myTokenFilter2 : type : length min : 0 max : 2000



위 예시를 가지고 설명을 드리면, myAnalyzer2 설정에 filter : [standard, lowercase, stop] 으로 정의가 되어 있습니다.

즉, filter 적용 순서가

1. standard

2. lowercase

3. stop

으로 적용이 된다고 보시면 됩니다.


아주 간단하죠.

제가 설정 순서를 잘못해 놓고 왜 안되지 하고 있었습니다. ㅡ.ㅡ;

:

[Elasticsearch] Delimited Payload Token Filter

Elastic/Elasticsearch 2016. 2. 23. 16:31

2.X 올라가면서 전체 API를 살펴 보지 못했는데 형분기 관련 구성을 하다가 눈에 확 들어 오는게 있어서 기록해 봅니다.


원문링크)


원문스크랩)

Named delimited_payload_filter. Splits tokens into tokens and payload whenever a delimiter character is found.


Example: "the|1 quick|2 fox|3" is split by default into tokens the, quick, and fox with payloads 1, 2, and 3 respectively.


Parameters:


delimiter

  Character used for splitting the tokens. Default is |.

encoding

  The type of the payload. int for integer, float for float and identity for characters. Default is float.



예전에 문서가 가지는 별도의 rankin, boostin, keyword score 등등 검색 로그를 기반으로 문서 가중치, 랭킹, 추천 데이터를 생성해서 문서에 반영해서 질의 시점에 사용을 했었는데요.

이 token filter 가 초기 0.90 사용할때 없어서 별도로 script plugin을 만들어서 사용했었습니다.

그렇다 보니 string 연산을 script 내부에서 하니까 성능적으로 문제가 있었는데요. 이 기능을 사용하면 성능 이슈 없이 쉽게 구현할 수 있을 것 같습니다.


1.3 부터 들어온 API 인것 같은데 그 동안 왜 몰랐나 싶내요.

한번 실험해 보고 결과도 공유 하도록 하겠습니다.

:

[Elasticsearch] qeuries, filters 에 대해..

Elastic/Elasticsearch 2014. 6. 10. 14:29

제 블로그 어디엔가 적었던것 같은데 쓰고도 찾지를 못하겠내요.. ㅡ.ㅡ;;

공유한 적이 있는지 없는지 기억이 안나서 그냥 다시 써 봅니다.

(치매 방지를 위해서... ㅎㅎ)


berlin buzz words 에서 clinton gormley 가 발표한 자료에 있는 내용입니다.

여기에 살짝 살만 붙혔습니다.


[Queries]

- relevance

- full text

- not cached

- slower



[Filters]

- boolean yes/no

- exact values

- cached

- faster


이 둘의 차이는 특성에 맞춰서 사용을 하셔야 합니다.

즉, 검색하고자 하는 문서들에 대한 ranking 이나 relevance document 의 결과를 얻고자 한다면 filter 를 먼저 사용하시면 안됩니다.

일반적인 웹문서 검색이나 쇼핑 상품 검색 같은 곳에서는 사용할 수 없겠죠.

- 결과에 relevant _score 가 반영 되어 있습니다.


filters 를 이용해서 사용하기 좋은 형태는 로그성 데이터 입니다.

즉, 문서간의 relevance 를 고려하지 않아도 되는 그런 문서에 적합합니다. 또한 성능도 훨씬 빠르겠죠.

- 결과에 relevant _score 가 반영 되어 있지 않습니다.


분석 및 통계에 활용하고자 한다면 query 보다 filter를 이용해 구현 하면 성능 향상에 도움을 받으실 수 있으니 참고 하시면 좋겠습니다.

:

[elasticsearch] filter & facet 사용 시 주의 사항.

Elastic/Elasticsearch 2013. 9. 4. 18:41

주의 사항이라고 할 것 까지는 없지만.. 가끔 당황 스러울때가 있으니 참고 정도 하시면 될 것 같습니다.

elasticsearch 에서

- filter 기능은 검색 질의 후 결과 셋에 대해서 filtering 을 해주는 기능

- facet 의 검색 질의 후 결과에 대한 groupby 연산을 해주는 기능

이라고 보시면 됩니다.


검색 질의 시 filter 기능을 사용하지 않고 구한 facet 결과는 당연히 질의 결과에 대한 facet result 를 줄 것이구요.

filter 기능을 적용하고 동일한 facet 을 적용했을 경우 아래와 같이 처리 됩니다.

- 검색 결과는 filtering 된 값이 나옴

- facet 결과는 초기 검색 식에 의해 나온 결과 셋의 facet result 가 나옴


filter 한 결과와 동일하게 나오게 하고 싶으시다면 filter 조건을 facetFilter 로 적용해 주시면 됩니다.

:

[elasticsearch] Core API - Search

Elastic/Elasticsearch 2013. 4. 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.



: