定義同義詞

機構往往擁有獨特的術語或多種方法 代表某個概念或事物您應該定義同義詞 幫助使用者找到符合條件的字詞。

同義詞是以 _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 來定義字詞及其同義詞。詳情請見 為以下項目建立內容連接器: 有關建立連接器的指示。

下列程式碼片段說明如何建立 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);