Eş anlamlı kelimeleri tanımlama

Kuruluşların kendine özgü bir terminolojiye veya bir kavrama ya da şeye atıfta bulunmak için birden fazla farklı yöntemine sahip olması yaygın bir durumdur. Kullanıcıların arama yaparken öğeleri bulmasına yardımcı olmak için terimlerin denkliğini sağlamak amacıyla eş anlamlılar tanımlamanız gerekir.

Eş anlamlılar, _dictionaryEntry iyi bilinen şemasına sahip öğelerin dizine eklenmesiyle tanımlanır.

_dictionaryEntry türündeki öğeler aşağıdaki özelliklere sahip olabilir:

Özellik Tür Açıklama Zorunlu mu?
_term string Tanımlanacak terim. Önerilen değerler, kısa çizgi kullanılmamış kelimeler veya noktalama işareti içermeyen kelime öbekleridir. Gerekli
_synonym string (repeated) _term politikasında tanımlanan dizeyle eşleşen sorgulara dahil edilecek alternatif terimler. Gerekli
_onlyApplicableForAttachedSearchApplications boolean Eş anlamlıları veri kaynağına ve arama uygulamasına göre gruplandırmanıza olanak tanır. Daha fazla bilgi için Veri kaynağına özel eş anlamlıları tanımlama bölümüne bakın. İsteğe bağlı

Bir kullanıcı, _term özelliğinin değerini bir sorguya eklediğinde etkili sorgu "terim VEYA eş anlamlılar" haline gelir. Örneğin, "scifi" terimi "science fiction" eş anlamlısıyla tanımlanırsa "scifi" kelimesini içeren bir sorgu "scifi" veya "science fiction." içeren öğelerle eşleşir

Eş anlamlılar çift yönlü olarak uygulanmaz. Sorgu "science fiction," içinse Cloud Search sorguya herhangi bir eş anlamlı uygulamaz. Sorgu yalnızca "science fiction." içeren öğelerle eşleşir ve "scifi" içeren öğeler atlanır.

Her iki terimi de birbirinin yerine kullanılabilir hale getirmek için her terimi ayrı ayrı tanımlayın:

Terim Eş anlamlılar
scifi science fiction
science fiction scifi

Sorgu işleme sırasında, eş anlamlılar uygulanmadan önce kısa çizgi ve diğer noktalama işaretleri kaldırılır. "sci-fi" kullanıcı sorgusu _term ile eşleşiyor "sci fi." Kullanıcılar tarafından kısa çizgi oluşturulabilecek terimlerin eş anlamlılarını oluşturmak için önce _term kodunu, kısa çizgi yerine boşluk kullanılacak şekilde normalleştirin.

Örneğe devam edersek aşağıdaki tanımlar, "sci-fi," "sci fi," "scifi," ve "science fiction" öğelerini birbirinin yerine kullanılabilir olarak ele alan kullanıcı sorgularıyla eşleşir:

Terim Eş anlamlılar
scifi science fiction, sci fi
sci fi science fiction, scifi
science fiction scifi, sci fi

Varsayılan olarak, herhangi bir veri kaynağındaki eş anlamlılar alanın tamamında geçerlidir. Özellikle eş anlamlılar, veri kaynağından bağımsız olarak tüm aramalar için arama uygulamalarında uygulanır. Veri kaynağına özgü eş anlamlılar istiyorsanız Veri kaynağına özgü eş anlamlıları tanımlama bölümüne bakın.

Cloud Search SDK'yı kullanarak küresel eş anlamlılar tanımlama

Terimleri ve eş anlamlılarını tanımlamak için Content Connector SDK'sını kullanabilirsiniz. Bağlayıcı oluşturma talimatları için İçerik bağlayıcısı oluşturma bölümüne bakın.

Aşağıdaki snippet'te, bir CSV dosya kaydına göre terimi ve eş anlamlıyı temsil eden bir RepositoryDoc oluşturulması gösterilmektedir:

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();
}

Eş anlamlıları tanımlarken aşağıdakilere dikkat edin:

  • Eş anlamlı girişlerinin alan geneline açık olması gerekir. Yukarıdaki örnekte EKL'nin DOMAIN_PUBLIC_ACL olarak ayarlanmasıyla bu işlem gerçekleştirilir.
  • Aşağıdaki özellikler, kodunuzdaki alan herkese açık ayarını geçersiz kılacağından yapılandırma dosyanız için tanımlanmamalıdır:
    • defaultAcl.mode=FALLBACK
    • defaultAcl.public=true

Arama uygulamasına özel eş anlamlıları tanımlama

Varsayılan olarak, eş anlamlı kelimeler tüm arama uygulamalarındaki tüm veri kaynaklarına uygulanır.

Ancak, kuruluşunuzun ayrı mühendislik ve satış ekipleri olduğunu ve her ekibe, işe özgü eş anlamlılar dahil olmak üzere farklı bir arama deneyimi sunmak istediğinizi varsayalım. Bu durumda, mühendisliğe özgü veri kaynağı ve eş anlamlıları içeren bir arama uygulaması ve satışa özel veri kaynağı ile eş anlamlıları içeren başka bir arama uygulaması oluşturabilirsiniz. Bu hedefe ulaşmak için _onlyApplicableForAttachedSearchApplications=true kullanarak belirli bir veri kaynağındaki her eş anlamlıyı dizine ekleyin. Bu ayar, eş anlamlıları yalnızca belirli bir veri kaynağını içeren arama uygulamalarına uygulanacak şekilde sınırlandırır.

Örneğin, aşağıdaki kod satırını önceki kod örneğine eklemek, dizine eklenen eş anlamlıların veri kaynağına özgü olmasını sağlar:

structuredData.put("_onlyApplicableForAttachedSearchApplications", true);