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

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

Синонимы определяются путем индексации элементов с использованием общеизвестной схемы _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

Вы можете использовать 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);