定義同義詞

機構通常擁有獨特的術語,或有多個提及概念或事物的方法。您應定義同義詞來建立對等字詞,以便使用者在搜尋時找到項目。

同義詞是以 _dictionaryEntry 已知結構定義為項目建立索引時,會定義同義詞。

_dictionaryEntry 類型的項目可包含下列屬性:

屬性 類型 說明 必填與否
_term string 要定義的字詞。建議值是沒有標點符號的連續字詞或詞組。 這是必填欄位
_synonym string (repeated) _term 中定義的字串相符的查詢中要包含的替代字詞。 這是必填欄位
_onlyApplicableForAttachedSearchApplications boolean 讓您依資料來源和搜尋應用程式將同義詞分組。詳情請參閱「定義資料來源專屬的同義詞」。 選用

當使用者在查詢中加入 _term 屬性的值時,「有效」查詢就會成為「字詞 OR 同義詞」。舉例來說,如果字詞 "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 定義全域同義詞

您可以使用 Content Connector 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=FALLBACK
    • defaultAcl.public=true

定義搜尋應用程式專用的同義詞

根據預設,同義詞會套用至所有搜尋應用程式的所有資料來源。

然而,假設貴機構有不同的工程和銷售團隊,且您想為每個團隊提供不同的搜尋體驗,包括各職務專屬的同義詞。在這種情況下,您可以建立一個搜尋應用程式,具有工程專屬的資料來源和同義詞,以及另一個具有銷售專屬資料來源和同義詞的搜尋應用程式。如要達成這個目標,請使用 _onlyApplicableForAttachedSearchApplications=true 為特定資料來源中的每個同義詞建立索引。這項設定會限制同義詞,只套用到包含特定資料來源的搜尋應用程式。

舉例來說,在先前的程式碼範例中新增以下這行程式碼,可確保已建立索引的同義詞適用於特定資料來源:

structuredData.put("_onlyApplicableForAttachedSearchApplications", true);