동의어 정의

조직은 일반적으로 고유한 용어나 동일한 개념을 지칭하는 여러 가지 방법을 사용합니다. 동의어를 정의하면 용어의 유사성이 정립되어 사용자가 검색 중에 항목을 찾는 데 도움이 됩니다.

_dictionaryEntry라는 잘 알려진 스키마를 사용하여 항목의 색인을 생성하는 방식으로 동의어를 정의합니다.

_dictionaryEntry 유형의 항목에는 다음 속성이 포함될 수 있습니다.

속성 유형 설명 필수 여부
_term string 정의할 용어. 권장 값은 구두점과 하이픈이 없는 단어 또는 구입니다. 필수
_synonym string (repeated) _term에 정의된 문자열과 일치하며, 쿼리에 포함되는 대체 용어 필수
_onlyApplicableForAttachedSearchApplications boolean 데이터 소스 및 검색 애플리케이션별로 동의어를 그룹화할 수 있습니다. 자세한 내용은 데이터 소스별 동의어 정의를 참조하세요. 선택사항

사용자가 쿼리에 _term 값을 포함할 때의 유효 쿼리는 'term OR synonyms'입니다. 예를 들어 "scifi""science fiction"이라는 동의어로 정의하면 "scifi"에 대한 쿼리는 두 용어 중 하나를 포함하는 항목과 일치합니다.

동의어는 기본적으로 양방향이 아닙니다. "science fiction"에 대한 쿼리는 "scifi"를 동의어로 사용하여 용어로 정의하지 않는 한 정확히 일치하는 구문만 일치합니다. 용어를 서로 바꿔서 사용할 수 있게 하려면 각 용어를 별도로 정의하세요.

용어 동의어
scifi science fiction
science fiction scifi

쿼리 처리에서는 동의어를 적용하기 전에 하이픈과 구두점을 삭제합니다. '"sci-fi"'에 대한 쿼리는 '"sci fi"'라는 용어와 일치합니다. 하이픈이 포함된 용어를 지원하려면 하이픈 대신 공백을 사용하도록 _term을 정규화하세요.

서로 바꿔서 사용할 수 있는 예:

용어 동의어
scifi science fiction, sci fi
sci fi science fiction, scifi
science fiction scifi, sci fi

기본적으로 동의어는 전체 도메인과 모든 검색 애플리케이션에 적용됩니다. 동의어를 제한하려면 데이터 소스별 동의어 정의를 참조하세요.

SDK를 사용하여 전역 동의어 정의

콘텐츠 커넥터 SDK를 사용하여 용어와 동의어를 정의합니다. 자세한 내용은 콘텐츠 커넥터 만들기 를 참조하세요.

이 스니펫은 a RepositoryDoc 을 CSV 레코드에서 빌드합니다.

DictionaryConnector.java
/**
 * Creates a document for indexing.
 *
 * For this connector sample, the created document is domain public
 *  searchable. The content is a simple text string.
 *
 * @param record The current CSV record to convert
 * @return the fully formed document ready for indexing
 */
private ApiOperation buildDocument(CSVRecord record) {
  // Extract term and synonyms from record
  String term = record.get(0);
  List<String> synonyms = StreamSupport.stream(record.spliterator(), false)
      .skip(1) // Skip term
      .collect(Collectors.toList());

  Multimap<String, Object> structuredData = ArrayListMultimap.create();
  structuredData.put("_term", term);
  structuredData.putAll("_synonym", synonyms);

  if (Configuration.getBoolean("dictionary.attachedToSearchApp", false).get()) {
    structuredData.put("_onlyApplicableForAttachedSearchApplications", true);
  }

  String itemName = String.format("dictionary/%s", term);

  // Using the SDK item builder class to create the item
  Item item =
      IndexingItemBuilder.fromConfiguration(itemName)
          .setItemType(IndexingItemBuilder.ItemType.CONTENT_ITEM)
          .setObjectType("_dictionaryEntry")
          .setValues(structuredData)
          .setAcl(DOMAIN_PUBLIC_ACL)
          .build();

  // Create the fully formed document
  return new RepositoryDoc.Builder()
      .setItem(item)
      .build();
}

중요 고려사항:

  • 동의어 항목은 도메인 공개여야 합니다. 예를 들어 ACL을 DOMAIN_PUBLIC_ACL로 설정할 수 있습니다.
  • 구성 파일에서 defaultAcl.mode=FALLBACK 또는 defaultAcl.public=true와 같이 이를 재정의하는 설정은 피하세요.

검색 애플리케이션별 동의어 정의

팀별 동의어 (예: 엔지니어링과 영업)를 제공하려면 _onlyApplicableForAttachedSearchApplications=true로 각 동의어의 색인을 생성하세요. 이렇게 하면 동의어가 특정 데이터 소스를 포함하는 검색 애플리케이션으로 제한됩니다.

예:

structuredData.put("_onlyApplicableForAttachedSearchApplications", true);