'Text'에 해당되는 글 3건

  1. 2022.07.14 [Elasticsearch] Text Analysis, Performance Aggs.
  2. 2020.04.22 [Bootstrap] Text Wrapping and Overflow 처리.
  3. 2018.12.19 [Elasticsearch] Keyword 와 Text 필드 간단 비교 설명

[Elasticsearch] Text Analysis, Performance Aggs.

Elastic/Elasticsearch 2022. 7. 14. 19:32

Aggregation 기능을 이용해서 Text 분석을 하고 싶을 때가 있습니다.

X-pack basic 범위에서 가능 하면 더 좋겠죠.

 

아래 공홈 문서 보시고 참고해 보시면 좋을 것 같습니다.

 

 - Text Analysis
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-categorize-text-aggregation.html
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-multi-terms-aggregation.html
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-rare-terms-aggregation.html
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-significantterms-aggregation.html
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-significanttext-aggregation.html

- Aggs Performance
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-filter-aggregation.html
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-filters-aggregation.html

:

[Bootstrap] Text Wrapping and Overflow 처리.

ITWeb/개발일반 2020. 4. 22. 14:24

[공식문서]

https://getbootstrap.com/docs/4.0/utilities/text/#text-wrapping-and-overflow

 

bootstrap 4.x 사용 하면서 inline css 나 별의 별 짓을 다 해봤으나 적용이 안되다가 위 문서 보고 처리 했습니다.

<div class="container-fluid">
  <div class="card">
    <div class="card-body">
      <div class="table-responsive">
        <table class="table">
          <thead>
          <tr>
            <th scope="col">#</th>
            <th scope="col">장치 인증서 ID</th>
            <th scope="col">장치 인증서 ARN</th>
            <th scope="col">상태</th>
            <th scope="col">생성일</th>
          </tr>
          </thead>
          <tbody>
          <tr>
            <th scope="row">1</th>
            <td>
              <span class="d-inline-block text-truncate" style="max-width: 150px;">
              262a1ac8a7d8aa72f6e96e365480f7313aa9db74b8339ec65d34dc3074e1c31e
              </span>
            </td>
            <td>
              <span class="d-inline-block text-truncate" style="max-width: 150px;">
                arn:aws:iot:us-west-2:123456789012:cert/262a1ac8a7d8aa72f6e96e365480f7313aa9db74b8339ec65d34dc3074e1c31e
              </span>
            </td>
            <td>ACTIVE</td>
            <td>1546447050.885</td>
            </td>
          </tr>
          </tbody>
        </table>
      </div>
    </div>
  </div>
</div>

 

예제)

<!-- Block level -->
<div class="row">
  <div class="col-2 text-truncate">
    Praeterea iter est quasdam res quas ex communi.
  </div>
</div>

<!-- Inline level -->
<span class="d-inline-block text-truncate" style="max-width: 150px;">
  Praeterea iter est quasdam res quas ex communi.
</span>

 

:

[Elasticsearch] Keyword 와 Text 필드 간단 비교 설명

Elastic/Elasticsearch 2018. 12. 19. 10:12

초 간단 비교)

- 둘 다 searchable 합니다.

- keyword 는 형태소 분석을 하지 않습니다. (not analyzed)

- text 는 형태소 분석을 합니다. (analyzed)


시작 하기에 앞서 먼저 공홈에서 제공하는 레퍼런스 부터 보시죠.


[Keyword]

https://www.elastic.co/guide/en/elasticsearch/reference/current/keyword.html


[Text]

https://www.elastic.co/guide/en/elasticsearch/reference/current/text.html


사실 위 문서만 자세히 읽어 보셔도 두 필드의 용도와 차이점이 어떻게 되는지는 쉽게 아실 수 있습니다.

다만, 사용하다 보면 놓치는 부분이 발생을 하는데 여기서는 제가 놓친 부분에 대해서 같은 실수를 하지 않기 위해 글로 남겨 보려 합니다.


keyword 는 기본적으로 exact value 입니다.

문서에서는 이렇게 표현 하고 있습니다.


They are typically used for filtering (Find me all blog posts where status is published), for sorting, and for aggregations. Keyword fields are only searchable by their exact value.


- filtering

- sorting

- aggregations

- searchable

- exact value


이 내용만 보시면 어떤 부분이 빠져 있다는 걸 알아채셔야 합니다.

결과적으로 말씀 드리면, 검색에 대한 내용만 있고 색인에 대한 내용은 빠져 있습니다.


색인에 대한 내용은 사실 문서의 

https://www.elastic.co/guide/en/elasticsearch/reference/current/keyword.html#keyword-params

이 부분을 보시면 되긴 합니다.

하지만 이 내용을 보더라도 쉽게 놓칠 수 있는 부분이 있습니다.

바로 형태소 분석이 어떻게 이루어 지느냐 입니다.


기본 analyzer 설정을 하지 않으면 standard analyzer 로 지정이 됩니다.

이 analyzer 는 기본적으로 lowercase filter 적용이 되어 있습니다.

그럼 keyword field 의 value 는 모두 lowercase filter 적용이 되겠지요?


뭐 아시겠지만 lowercase filter 적용이 되지 않습니다.

parameter 설정을 찾아 보셔서 아시겠지만 analyzer 설정 하는 내용이 없습니다.

text 의 경우 per field analyzer 설정이 가능 합니다.

하지만 keyword 는 설정을 할 수가 없습니다.

이 말은 keyword field 의 value 는 입력 상태 그대로의 값이 저장 된다고 보시면 됩니다.

별도의 token filter 적용이 되지 않는 다는 것입니다.


[KeywordFieldMapper]

public static class Defaults {
public static final MappedFieldType FIELD_TYPE = new KeywordFieldType();

static {
FIELD_TYPE.setTokenized(false);
FIELD_TYPE.setOmitNorms(true);
FIELD_TYPE.setIndexOptions(IndexOptions.DOCS);
FIELD_TYPE.freeze();
}

public static final String NULL_VALUE = null;
public static final int IGNORE_ABOVE = Integer.MAX_VALUE;
}


여기서 그럼 이 야기를 왜 하는 것일까요?

한글은 대소문자 구분이 없어서 상관 없지만 영문자와 같은 경우 대소문자 구분이 된다는 이야기를 드리기 위해서 이렇게 서론이 길었습니다.



결론)

Keyword 필드의 Value 는 Token filter 적용이 되지 않습니다.

대소문자 구분에 주의 해서 사용 하셔야 합니다.



: