Eş anlamlı kelimeleri tanımlama

Bir kuruluşun benzersiz terminolojisi veya bir kavramı ya da şeyi ifade etmenin birden fazla yolu olması yaygın bir durumdur. Kullanıcıların arama yaparken öğeleri bulmasına yardımcı olmak için terimlerin eşdeğerliğini belirleyecek eş anlamlılar tanımlamanız gerekir.

Eş anlamlılar, öğeleri _dictionaryEntry iyi bilinen şemasıyla dizine ekleyerek 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, noktalama işareti içermeyen ve tireyle ayrılmamış kelimeler veya kelime öbekleridir. Zorunlu
_synonym string (repeated) _term içinde tanımlanan dizeyle 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ı kelimeler tanımlama başlıklı makaleyi inceleyin. İsteğe bağlı

Bir kullanıcı sorguya _term özelliğinin değerini eklediğ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." terimlerini içeren öğelerle eşleşir.

Eş anlamlı kelimeler iki yönlü olarak uygulanmaz. Sorgu bunun yerine "science fiction," Cloud Search içinse sorguya eş anlamlı kelimeler uygulanmaz. Sorgu yalnızca "science fiction." içeren öğelerle eşleşiyor. "science fiction." içeren öğeler atlanıyor."scifi"

Her iki terimin de birbirinin yerine kullanılabilmesini sağlamak 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 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 tireyle ayrılmış olabilecek terimler için eş anlamlılar oluşturmak üzere önce _term öğesini normalleştirerek tire yerine boşluk kullanın.

Örneğe devam edersek aşağıdaki tanımlar, kullanıcı sorgularıyla eşleşir ve treat "sci-fi," "sci fi," "scifi," ile "science fiction" kelimelerini birbirinin yerine kullanılabilir olarak değerlendirir:

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 tüm alan için geçerlidir. Daha net bir ifadeyle, eş anlamlı kelimeler, veri kaynağından bağımsız olarak tüm aramalar için arama uygulamalarında kullanılır. Veri kaynağına özgü eş anlamlı kelimeler istiyorsanız Veri kaynağına özgü eş anlamlı kelimeler tanımlama başlıklı makaleyi inceleyin.

Cloud Search SDK'yı kullanarak genel 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ı oluşturma başlıklı makaleyi inceleyin.

Aşağıdaki snippet, bir CSV dosyası kaydına dayalı olarak terimi ve eş anlamlıyı temsil eden bir RepositoryDoc oluşturmayı gösterir:

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şlerin herkese açık olması gerekir. Önceki örnekte bu, ACL'yi DOMAIN_PUBLIC_ACL olarak ayarlayarak gerçekleştirilir.
  • Aşağıdaki özellikler, kodunuzdaki alan herkese açık ayarını geçersiz kıldığı için yapılandırma dosyanızda 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şunuzda ayrı mühendislik ve satış ekipleri olduğunu ve her ekibe, iş rolüne özgü eş anlamlı kelimeler de 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ı ile satışa özgü bir veri kaynağı ve eş anlamlı kelimeler içeren başka bir arama uygulaması oluşturabilirsiniz. Bu hedefi gerçekleştirmek için belirli bir veri kaynağındaki her eş anlamlı kelimeyi _onlyApplicableForAttachedSearchApplications=true kullanarak dizine ekleyin. Bu ayar, eş anlamlı kelimeleri yalnızca belirli bir veri kaynağını içeren arama uygulamalarına uygulanacak şekilde sınırlar.

Ö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);