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

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

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

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

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

Когда пользователь включает значение _term в запрос, фактический запрос становится " term OR synonyms ". Например, если вы определяете "scifi" с помощью синонима "science fiction" , запрос для "scifi" будет соответствовать элементам, содержащим любой из этих терминов.

Синонимы по умолчанию не являются двунаправленными. Запрос по слову "science fiction" будет соответствовать только этой точной фразе, если вы не определите её как термин, в котором "scifi" является синонимом. Чтобы сделать термины взаимозаменяемыми, определите каждый из них отдельно:

Срок Синонимы
scifi science fiction
science fiction scifi

При обработке запроса удаляются дефисы и знаки препинания перед применением синонимов. Запрос по слову "sci-fi" соответствует термину "sci fi" . Для поддержки терминов с дефисами, нормализуйте _term , используя пробелы вместо дефисов.

Взаимозаменяемые примеры:

Срок Синонимы
scifi science fiction, sci fi
sci fi science fiction, scifi
science fiction scifi, sci fi

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

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

Используйте SDK Content Connector для определения терминов и синонимов. Подробности см. в разделе «Создание коннектора контента» .

Этот фрагмент кода создает объект 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);