Определение синонимов

В организациях обычно имеется уникальная терминология или несколько способов обозначения концепции или предмета. Вам следует определить синонимы, чтобы установить эквивалентность терминов, чтобы помочь пользователям находить элементы при поиске.

Синонимы определяются путем индексации элементов с помощью известной схемы _dictionaryEntry .

Элементы типа _dictionaryEntry могут иметь следующие свойства:

Свойство Тип Описание Необходимый?
_term string Термин, который необходимо определить. Рекомендуемые значения — слова или фразы без дефиса и без знаков препинания. Необходимый
_synonym string (repeated) Альтернативные термины, которые будут включены в запросы, соответствующие строке, определенной в _term . Необходимый
_onlyApplicableForAttachedSearchApplications boolean Позволяет группировать синонимы по источнику данных и приложению поиска. Дополнительную информацию см. в разделе Определение синонимов, специфичных для источника данных . Необязательный

Когда пользователь включает в запрос значение свойства _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

По умолчанию синонимы в любом источнике данных применяются ко всему домену. В частности, синонимы применяются в поисковых приложениях для всех поисков независимо от источника данных. Если вам нужны синонимы для конкретного источника данных, обратитесь к разделу Определение синонимов для конкретного источника данных .

Определите глобальные синонимы с помощью Cloud Search SDK

Вы можете использовать Content Connector SDK для определения терминов и их синонимов. Инструкции по созданию соединителя см. в разделе Создание соединителя контента .

Следующий фрагмент иллюстрирует создание RepositoryDoc представляющего термин и синоним, на основе записи файла CSV:

СловарьConnector.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);