Eş anlamlı kelimeleri tanımlama

Bir kuruluşun benzersiz terminolojiye veya bir kavrama ya da nesneye atıfta bulunmanın birden fazla yoluna sahip olması yaygındır. Kullanıcıların arama yaparken öğeleri bulmasına yardımcı olmak için terimlerin eşdeğerliğini belirlemek üzere eş anlamlı kelimeler tanımlamanız gerekir.

Eş anlamlılar, öğeler _dictionaryEntry bilinen şemasıyla dizine eklenerek tanımlanır.

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

Mülk Tür Açıklama Zorunlu mu?
_term string Tanımlanacak terim. Önerilen değerler, kısa çizgi kullanılmayan kelimeler veya noktalama işareti içermeyen kelime öbekleridir. Zorunlu
_synonym string (repeated) _term içinde tanımlanan diziyle eşleşen sorgulara dahil edilecek alternatif terimler. Zorunlu
_onlyApplicableForAttachedSearchApplications boolean Eş anlamlı kelimeleri veri kaynağına ve arama uygulamasına göre gruplandırmanıza olanak tanır. Daha fazla bilgi için Veri kaynağına özgü eş anlamlı kelimeleri tanımlama başlıklı makaleyi inceleyin. İsteğe bağlı

Bir kullanıcı _term mülkünün değerini bir sorguya dahil ettiğinde etkili sorgu "terim VEYA eş anlamlılar" olur. Ö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 iki yönlü olarak uygulanmaz. Sorgu bunun yerine "science fiction," içinse Cloud Search, sorguya herhangi bir eş anlamlı kelime uygulamaz. Sorgu yalnızca "science fiction." içeren öğelerle eşleşir. "scifi" içeren öğeler atlanır.

Her iki terimi de birbirinin yerine kullanabilmek için her terimi ayrı olarak tanımlayın:

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

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

Örneğe devam edersek aşağıdaki tanımlar, "sci-fi," "sci fi," "scifi," ve "science fiction" değerlerini birbirinin yerine kullanılabilecek şekilde 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çerli olur. Özellikle, eş anlamlılar veri kaynağından bağımsız olarak tüm aramalar için arama uygulamalarına uygulanır. Veri kaynağına özgü eş anlamlılar istiyorsanız Veri kaynağına özgü eş anlamlılar tanımlama başlıklı makaleyi inceleyin.

Cloud Search SDK'sını kullanarak genel eş anlamlı kelimeleri tanımlama

Terimleri ve eş anlamlılarını tanımlamak için Content Connector SDK'sını kullanabilirsiniz. Bağlayıcı oluşturmayla ilgili talimatlar için İçerik bağlayıcısı oluşturma başlıklı makaleyi inceleyin.

Aşağıdaki snippet'te, bir CSV dosyası kaydına dayalı terimi ve eş anlamlısını 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ı kelimeleri tanımlarken aşağıdakilere dikkat edin:

  • Eş anlamlı kelime girişlerinin alan adının herkese açık olması gerekir. Önceki örnekte bu, ACL'nin DOMAIN_PUBLIC_ACL olarak ayarlanmasıyla gerçekleştirilmiştir.
  • Aşağıdaki özellikler, kodunuzdaki alan herkese açık ayarını geçersiz kıldığı için yapılandırma dosyanız için tanımlanmamalıdır:
    • defaultAcl.mode=FALLBACK
    • defaultAcl.public=true

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

Eş anlamlılar varsayılan olarak tüm arama uygulamalarındaki tüm veri kaynaklarına uygulanır.

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

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

structuredData.put("_onlyApplicableForAttachedSearchApplications", true);