본문 바로가기
개발/ALGOLIA

알고리아 Managing Results(3-32)

by dev_caleb 2022. 3. 5.
728x90

 

Faceting

https://www.algolia.com/doc/guides/managing-results/refine-results/faceting/

 

Faceting | Algolia

Learn how faceted searching works with Algolia. Algolia uses facets for categorizing and grouping your data.

www.algolia.com

 

Facets let you create categories on a select group of attributes, so users can refine their search. For example, on an index of books, helpful facets might be author and genre. Algolia also calculates results for each facet. It allows you to display facets and facet counts so that users can filter results (for example, by author or genre).

Faceting is a common search feature that Algolia provides out of the box. To leverage faceting, you need to enable it on a per-attribute basis with the attributesForFaceting parameter. It allows you to:

패싯을 사용하면 사용자가 검색을 세분화할 수 있도록 선택한 속성 그룹에 범주를 만들 수 있습니다. 예를 들어, 책의 색인에서 도움이 되는 측면은 작가와 장르가 될 수 있다. 알골리아는 또한 각 면에 대한 결과를 계산합니다. 사용자가 결과를 필터링할 수 있도록(예: 작성자 또는 장르별) 면 및 면 수를 표시할 수 있습니다.
Faceting은 알골리아가 즉시 제공하는 일반적인 검색 기능이다. Faceting을 활용하려면 속성별로 속성ForFaceting 매개변수를 사용하여 Faceting을 활성화해야 합니다. 다음을 수행할 수 있습니다.

  • List all possible values for the selected attributes and return contextual values and counts with each search result.
  • Compute a facet count or the number of records matching each value of the attribute.
  • Enable search within the values of this attribute (known as search for facet values).

- 선택한 특성에 대해 가능한 모든 값을 나열하고 각 검색 결과와 함께 상황별 값과 개수를 반환합니다.
- 각 특성 값과 일치하는 면 개수 또는 레코드 수를 계산합니다.
- 이 특성의 값 내에서 검색을 활성화합니다(패싯 값 검색이라고 함).

 

 

Search for facet values deals with facets configuration in the search relevance retrieval aspect. To configure facets in your user interface, see the facet display guide.

 

패싯 값 검색은 검색 관련성 검색 측면에서 패싯 구성을 처리합니다. 사용자 인터페이스에서 패싯을 구성하려면 패싯 화면표시 가이드를 참조하십시오.

 

What’s a facet?#

Faceted search is a way of classifying records, allowing users to narrow down results. Facets correspond to those taxonomies, which let users refine results by multiple dimensions at a time.

For a book index, facets can be author or genre. For a luxury shop, they can be brands or designers. You can think of facets as filterable categories. Algolia derives these facets from attributes.

Faceted search은 레코드를 분류하는 한 방법으로, 사용자가 결과를 좁힐 수 있습니다. 패싯은 사용자가 한 번에 여러 차원으로 결과를 구체화할 수 있는 분류법에 해당한다.
책 색인의 경우, facets은 저자 또는 장르가 될 수 있습니다. 명품 샵에서는 브랜드나 디자이너가 될 수 있다. 패싯은 필터링 가능한 categories라고 생각할 수 있습니다. 알골리아는 이러한 면들을 속성으로부터 파생한다.

Difference between filters and facets

Filters and facets often get mixed up because there’s much overlap, but understanding the difference is essential. Both help to restrict a search to a subset of results.

필터와 면은 겹치는 부분이 많아 혼동되는 경우가 많지만 그 차이를 이해하는 것은 필수다. 둘 다 결과의 하위 집합으로 검색을 제한하는 데 도움이 됩니다.

  • Filters provide basic options to help narrow down search results. Sometimes users don’t see the filter restrictions, for example, when automatically filtering to the records they’re allowed to see based on their user ID.
  • Facets offer categories to help users refine their search using several complex dimensions at a time. Faceting is still filtering but uses facets to allow users to choose from a set of useful values, features, and counts.

-필터는 검색 결과의 범위를 좁히는 데 도움이 되는 기본 옵션을 제공합니다. 예를 들어 사용자 ID에 따라 볼 수 있는 레코드로 자동으로 필터링할 때 필터 제한이 표시되지 않는 경우가 있습니다.
-패싯은 사용자가 한 번에 여러 복잡한 차원을 사용하여 검색을 세분화하는 데 도움이 되는 범주를 제공합니다. 패싱은 여전히 필터링이지만 사용자가 유용한 값, 기능 및 개수를 선택할 수 있도록 패싯을 사용합니다.

 

 

Declaring attributes for faceting(패싱에 대한 특성 선언)

To make an attribute filterable or “facetable”, you must add it to your attributesForFaceting list. Do this either in the dashboard or through the API.

For example, if you wanted to make your genre and author attributes available for both faceting and filtering, you’d need to apply the following setting:

속성을 필터링하거나 "패싯가능"으로 설정하려면, 해당 속성을 AttributesForFaceting 목록에 추가해야 합니다. 대시보드 또는 API를 통해 이 작업을 수행합니다.
예를 들어 장르 및 작성자 특성을 패싱 및 필터링에 모두 사용하도록 만들고 싶다면, 다음 설정을 적용해야 합니다.

index.setSettings({
  attributesForFaceting: ['genre', 'author']
});

The example shows you how to filter on genre or author, and also lists all possible values for each attribute. You could display these on your search UI, so that users can select them.

To use the attributes just for filtering, use the filterOnly modifier:

이 예에서는 장르 또는 작성자를 필터링하는 방법을 보여 주며 각 특성에 대해 가능한 모든 값을 나열합니다. 사용자가 선택할 수 있도록 검색 UI에 표시할 수 있습니다.
속성을 필터링에만 사용하려면 filterOnly 한정자를 사용합니다.

index.setSettings({
  attributesForFaceting: ['filterOnly(author)']
});

Filter-only attributes are helpful when you don’t need to offer a choice to the user. For example, in a book collection, you have one page per author and want to automatically filter results based on the page the user is visiting. It also improves performance because the engine doesn’t need to compile facet counts.

필터 전용 특성은 사용자에게 선택권을 제공할 필요가 없을 때 유용합니다. 예를 들어, 책 모음에 저자당 한 페이지가 있으며 사용자가 방문 중인 페이지에 따라 결과를 자동으로 필터링하려고 합니다. 또한 엔진이 면 수를 컴파일할 필요가 없기 때문에 성능이 향상됩니다.

 

 

You shouldn’t include colons (:) in attribute names that you want to use for faceting, because the filters syntax relies on that character as a delimiter.

 

필터 구문은 해당 문자를 구분 기호로 사용하므로 패싯에 사용할 특성 이름에 콜론(:)을 포함해서는 안 됩니다.

 

 

Retrieving facets(패싯을 검색하는 중)

To retrieve facets and their respective counts as part of the JSON response, you must specify a list of facets in the facets parameter at query time.

For example, you can retrieve your books’ facets by specifying the following list:

JSON 응답의 일부로 패싯과 해당 카운트를 검색하려면 쿼리 시 패싯 매개변수에 패싯 리스트를 지정해야 합니다.
예를 들어, 다음 목록을 지정하여 책의 단면도를 검색할 수 있습니다.

 

index.search('query', {
  facets: ['author', 'genre']
});

 

To extract all facet information, you can use a wildcard (*).

 

index.search('query', {
  facets: ['*']
});

 

When the facets parameter is empty, the engine returns no facet information.

 

 

 

 

Faceting types and features

Conjunctive and disjunctive faceting(결합 및 분리 faceting)

Facet filtering, filtering based on facet values, is a helpful feature for users since it allows them to find specific, targeted results in a way that isn’t possible with one-size-fits-all filters.

You can combine facet filters with AND (conjunctive) and OR (disjunctive) operators. When using these operators, the engine handles the facet counts differently to keep a consistent user experience. This doesn’t happen at the API level, but in the InstantSearch libraries.

 패싯 필터링은, 패싯 값을 기반으로 필터링하며, 단일 크기 필터로는 불가능한 방식으로 특정 목표 결과를 찾을 수 있으므로 사용자에게 유용한 기능입니다.
패싯 필터는 AND(연결) 및 OR(분리) 연산자와 결합할 수 있습니다. 이러한 연산자를 사용할 때 엔진은 일관된 사용자 경험을 유지하기 위해 면 수를 다르게 처리합니다. 이 사항은 API 수준이 아니라 InstantSearch 라이브러리에서 발생합니다.

Hierarchical facets

You can build a hierarchy in your facet values to enable multi-level navigation and filtering. This pattern is interesting to improve discoverability when you have deeply nested categories, as your users can browse up and down in the levels to refine their search.

For example, imagine a book available in Books > Science Fiction > Time Travel:

패싯 값에 계층을 작성하여 다단계 탐색 및 필터링을 사용할 수 있습니다. 이 패턴은 사용자가 검색 범위를 세분화하기 위해 수준을 위아래로 탐색할 수 있으므로 범주가 깊이 중첩되어 있을 때 검색 기능을 향상시키는 데 유용합니다.
예를 들어, 책 > 공상 과학 > 시간 여행에서 구할 수 있는 책을 상상해 보세요.

 

Or a book available in both Books > Science Fiction > Time Travel and Books > Literature & Fiction > Modernism:

또는 책> 공상과학> 시간여행 과 책> 소설>모더니즘 카테고리에 모두 있는 책을 상상해보세요.

 

The hierarchicalMenu widget from the InstantSearch libraries helps you to build hierarchical faceting.

 

Instant Search 라이브러리의 계층적 메뉴 위젯을 사용하여 계층적 패싱을 작성할 수 있습니다.

 

 

 

  • Disjunctive faceting with hierarchical facets isn’t yet possible.
  • Using hierarchical facets with many nested attributes creates many different facet names. This adds a lot of metadata which needs to be processed. That can lead to poor search performance, even if you don’t reference those facets directly.

계층적 측면을 가진 분리적 패싱은 아직 가능하지 않다.
중첩된 속성이 많은 계층적 패싯을 사용하면 다양한 패싯 이름이 만들어집니다. 이것은 처리해야 할 많은 메타데이터를 추가합니다. 이러한 측면을 직접 참조하지 않더라도 검색 성능이 저하될 수 있습니다.

Contextual facet values and counts 상황별 면 값 및 개수

Enabling faceting on attributes computes facet counts for each facet value, and the engine updates and returns the list of values and counts with each search result. It’s helpful to offer users a relevant and contextual set of filters and information.

속성에서 패싱 기능을 활성화하면 각 패싯 값에 대한 패싯 카운트가 계산되고, 엔진은 각 검색 결과와 함께 값 및 카운트 목록을 업데이트하고 반환합니다. 사용자에게 관련되고 상황에 맞는 필터 및 정보 집합을 제공하는 것이 유용합니다.

How the engine approximates facet counts 엔진이 면 개수#에 근사하는 방법#

When dealing with massive indices, the engine might need to approximate facet counts to guarantee optimal performance. If you want to know whether the facet counts are exact, you can check the exhaustiveFacetsCount property in the JSON response.

대규모 인덱스를 처리할 때 엔진은 최적의 성능을 보장하기 위해 면 수를 대략적으로 계산해야 할 수 있습니다. 패싯 카운트가 정확한지 알고 싶다면 JSON 응답에서 전체 FacetsCount 속성을 확인할 수 있습니다.

 

Increasing the default limit#

By default, the engine lets you retrieve 100 values per facet. If you need to increase this limit, you can use the maxValuesPerFacet parameter. The maximum is 1000 facet values at a time.

 

index.setSettings({
  maxValuesPerFacet: 1000
});

기본 적으로 엔진은 페싯당 100개의 값을 제공한다. 그러나 리미트를 증가시키고 싶으면 facet별 value parameter를 사용할 수 있다. 한 번에 1000 facet 값이 최대치 이다.

 

 

Faceting on objectID#

You can’t facet on the objectID attribute, and the engine ignores it if you declare it in attributesForFaceting. Faceting on a unique identifier makes little sense, though, because every facet count would be equal to one.

objectId 속성에 facet을 할 수 없다.ID 특성은 Faceting 특성에서 선언하면 무시됩니다. 게다가 모든 면 카운트가 1과 같기 때문에 고유 식별자를 면으로 표시하는 것은 거의 의미가 없다.

 

 

The engine treats the objectID attribute as a filter-only facet. You can filter on that attribute (even without declaring it in attributesForFaceting), but not get any facet counts.

엔진이 objectId 특성을 filter-only facet으로 다룬다. 너는 오직 특성으로 필터링할 수 있다.(그것을 패싯 특성에서 declare하지 않고도 ) 패싯 수를 가져올 수 없다.

 

Attributes are case-sensitive (attribute 는 대소문자 구분)

The attribute names you declare in attributesForFaceting are case-sensitive: they must exactly match the attribute names in your records. The facetFilters and filters parameters are only case-insensitive for values.

For example, if your records include an attribute named color, with values such as “blue”, “red”, and “green”, you must declare color (not Color) within your attributesForFaceting. You can, however, facet and filter using color:BLUE, color:Blue, or color:blue`.

당신이 attributeForFaceting에 declare한 특성 이름은 대소문자 구분을 해야한다. 그들은 너의 records안에서 정확하게 특성이름과 매치되어야 한다. facetfilters와 filters parameter는 모두 대소문자 구분이 없는 파라미터이다.

예를 들어서, 당신이 너의 레코드에 컬러속성을 추가한다면, (파랑, 빨강, 초록), 너는 color(Color 아닌)로 attributesForFaceting에 declare해야한다. 하지만 너는 facet과 fliter에 Blue, blue 등으로 사용할 수 있다.

As an exception, facetFilters and filters are case-sensitive when filtering on objectID. For example, objectID:abc only returns the record with that specific objectID, not one with objectID:ABC.

예외적으로, facetFilters와 fliters는 objectID flitering할 때 case-sensitive하다. 예를 들어, objectID: abc는 오직 특정 objectID를 return한다. ABC를 함께 return하지 않는다.

 

Search for facet values(facet values 찾기)

Sometimes you may have thousands of different values for a given facet attribute, and it would be impossible to display them all on the UI. Instead, you can leverage search_for_facet_values to let users search within a specific faceted attribute (for example, brands, authors, or categories) without needing to create a separate index. It means that you can still display the first, most common values for each facet, but also let the user search for more.

By default, returned facet values are sorted by count.

때때로 당신은 주어진 facet attribute로 수천개의 다른 값을 가지고 있을 수 있다. 그리고 그것은 UI로 모두 보여주는 것이 불가능하다. 대신에 너는 'search for facet value'를 사용해서 유저가 특정한 facet 된 특성(예를 들어서 브랜드, 저자, 카테고리) 안 에서 찾도록 할 수 있다. 특정 index를 만들지 않고. 즉, 각 패싯에 대해 가장 일반적인 첫 번째 값을 표시할 수 있지만 사용자가 더 많은 값을 검색할 수도 있습니다. 기본적으로, return 되는 facet 값은 count로 정렬 된다.

 

Facet queries only match prefixes, typos, and exact.

Face 쿼리는 접두사, 오타 및 정확한 것만 매치 됩니다.

Declaring a searchable attribute for faceting(faceting을 위한  검색 attribute 선언하기)

You can make a facet searchable on the dashboard (in the Configuration tab of the target index), or with the API:

대시보드에서(대상 인덱스의 구성 탭) 또는 API를 사용하여 패싯을 검색할 수 있도록 설정할 수 있습니다.

 

index.setSettings({
  attributesForFaceting: [
    'searchable(author)'
  ]
});

 

Searching in facet values  (facet value 안에서 검색하기)

In this example, the engine would return all the authors matching the query “stephen”.

이 예에서, 엔진은 'stephen' 쿼리와 일치하는 저자를 모두 반환한다.

index.searchForFacetValues('author', 'stephen').then(({ facetHits }) => {
  console.log(facetHits);
});

 

 

Increasing the default limit(기본 limit 증가시키기)

By default, you retrieve 10 facet values at a time. You can raise this limit up to 100 by updating the maxFacetHits parameter.

기본적으로, 10 facet value가 한번에 반환된다. mxFacehits를 업데이트함으로써 100개까지 limit를 증가시킬 수 있다.

index.setSettings({
  maxFacetHits: 100
});

 

728x90

'개발 > ALGOLIA' 카테고리의 다른 글

알고리아 Managing Results(3-35)  (0) 2022.04.27
알고리아 Managing Results(3-33)  (0) 2022.04.20
알고리아 Managing Results(3-31)  (0) 2022.03.05
알고리아 Managing Results(3-30)  (0) 2022.03.05
알고리아 Managing Results(3-29)  (0) 2022.03.05