동의어 정의

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

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

_dictionaryEntry 유형의 항목에는 2가지 속성이 필요합니다.

속성 유형 설명
_term 문자열 정의할 용어. 권장 값은 구두점과 하이픈이 없는 단어 또는 구입니다.
_synonym 문자열(반복) _term에 정의된 문자열과 일치하며, 쿼리에 포함되는 대체 용어

사용자가 쿼리에 _term 속성의 값을 포함할 때의 유효 쿼리는 'term OR synonyms'입니다. 예를 들어 'scifi'라는 용어에 'science fiction'이라는 동의어가 정의된 경우 'scifi'라는 단어를 포함하는 쿼리는 'scifi' 또는 'science fiction'을 포함하는 항목과 일치합니다.

동의어는 양방향으로 적용되지 않습니다. 대신에 'science fiction'에 대한 쿼리에는 동의어가 적용되지 않습니다. 이 쿼리는 'science fiction'이 포함된 항목하고만 일치합니다. 'scifi'가 포함된 항목은 생략됩니다.

두 용어를 서로 바꿔서 사용할 수 있게 하려면 각 용어를 별도로 정의하세요.

용어 동의어
scifi science fiction
science fiction scifi

쿼리 처리 중에는 하이픈 및 기타 구두점이 제거된 후 동의어가 적용됩니다. 사용자 쿼리 sci-fi_term sci fi와 일치합니다. 사용자가 하이픈을 추가할 수 있는 용어의 동의어를 만들려면 먼저 하이픈 대신 공백을 사용하도록 _term을 정규화하세요.

위의 예시에서 다음과 같은 정의는 sci-fi, sci fi, scifi, science fiction을 서로 바꿔서 사용할 수 있는 용어로 처리하는 사용자 쿼리와 일치합니다.

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

콘텐츠 커넥터 SDK를 사용하여 용어 및 동의어 만들기

콘텐츠 커넥터 SDK를 사용하여 용어와 동의어를 정의할 수 있습니다. 커넥터 제작 방법을 보려면 콘텐츠 커넥터 만들기를 참조하세요.

다음 스니펫은 CSV 파일 레코드를 기반으로 용어와 동의어를 표현하는 RepositoryDoc를 만드는 방법을 보여줍니다.

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);

      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