定义同义词

在引用某种概念或事物时,组织通常会采用独特的术语或多种引用方式。建议您定义同义词以建立等效术语,从而帮助用户在搜索时找到相关项。

如需定义同义词,您可以使用 _dictionaryEntry 常用架构来将项编入索引。

_dictionaryEntry 类型的项需要以下两个属性:

属性 类型 说明
_term 字符串 需要定义的术语。推荐值是不带连字符的字词或不带标点符号的短语。
_synonym 字符串(重复属性) 需要包含在与 _term 所定义字符串匹配的查询中的替代术语

如果用户在查询中添加了 _term 属性的值,则该查询的有效结果为包含“术语或同义词”的项。例如,如果为“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

使用 Content Connector 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);

      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