類義語を定義する

組織では、同じコンセプトを指し示すのに固有の用語や複数の方法が存在することがよくあります。類義語を定義すると、用語の同等性が確立され、ユーザーが検索時にアイテムを見つけやすくなります。

類義語は、よく知られたスキーマ _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 を使用して、用語と同義語を定義します。詳細については、コンテンツ コネクタを作成するをご覧ください。

このスニペットは、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);

  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=FALLBACKdefaultAcl.public=true など、この設定をオーバーライドする設定は避けてください。

検索アプリケーション固有の類義語を定義する

チーム固有の同義語(エンジニアリングとセールスなど)を指定するには、各同義語に _onlyApplicableForAttachedSearchApplications=true を使用してインデックスを付けます。これにより、シノニムは特定のデータソースを含む検索アプリケーションに制限されます。

例:

structuredData.put("_onlyApplicableForAttachedSearchApplications", true);