類義語を定義する

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

類義語は、よく知られている _dictionaryEntry を使用してアイテムをインデックス登録することで定義されます。 説明します。

_dictionaryEntry タイプのアイテムには、次のプロパティを設定できます。

プロパティ タイプ 説明 必須
_term string 定義する用語。推奨値は、ハイフンが付いていない単語または句読点のないフレーズです。 必須
_synonym string (repeated) _term で定義された文字列に一致するクエリに含めることができる代わりの用語。 必須
_onlyApplicableForAttachedSearchApplications boolean データソースや検索アプリケーションごとに類義語をグループ化できます。詳細については、データソース固有の同義語を定義するをご覧ください。 省略可

ユーザーがクエリに _term プロパティの値を含めると、 有効なクエリは「term OR synonyms」になります。たとえば、 用語 "scifi" が同義語で定義されている "science fiction" を押してから、クエリ "scifi" という単語を含むアイテムは、次を含むアイテムに一致します。 "scifi" または "science fiction."

類義語は双方向には適用されません。クエリが "science fiction," Cloud Search クエリに類義語は適用されません。このクエリでは、次を含むアイテムのみが一致します: "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

デフォルトでは、データソースの類義語はドメイン全体に適用されます。 具体的には、類義語はすべての検索で検索アプリケーション全体に適用されます。 常に同じですデータソース固有の同義語が必要な場合は、以下をご覧ください。 データソース固有の同義語を定義するをご覧ください。

Cloud Search SDK を使用してグローバルな類義語を定義する

コンテンツ コネクタ SDK を使用して、用語とその同義語を定義できます。コネクタを構築する方法については、コンテンツ コネクタを作成するをご覧ください。

次のスニペットは、 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 に設定することによってこれを実現しています。
  • 構成ファイルでは、次のプロパティは定義しないでください。 コード内のドメイン公開設定をオーバーライドするためです。 <ph type="x-smartling-placeholder">
      </ph>
    • defaultAcl.mode=FALLBACK
    • defaultAcl.public=true

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

デフォルトでは、類義語はすべての検索のすべてのデータソースに適用されます。 説明します。

ただし、組織にエンジニアリング チームと営業チームが別々に存在していて、 検索エクスペリエンスにチームごとに 異なる検索エクスペリエンスを提供するとします 同じ意味で使います。この場合、1 つの検索を作成して、 エンジニアリング固有のデータソースと同義語、その他のデータソースを 検索アプリケーションを作成できます。目的 この目標では、特定のデータソースで各類義語にインデックスを付けます。 _onlyApplicableForAttachedSearchApplications=true を使用します。この 設定では、類義語が検索にのみ適用されるように制限します。 特定のデータソースを含むアプリの場合です

たとえば、 上記のコードサンプルに次のコード行を追加することで、インデックス付けされた類義語が データソース固有です。

structuredData.put("_onlyApplicableForAttachedSearchApplications", true);