Eş anlamlı kelimeleri tanımlama

Kuruluşların bir kavramı veya şeyi ifade etmek için benzersiz terminolojiye veya farklı yollara sahip olması yaygın bir durumdur. Kullanıcıların arama yaparken öğeleri bulmasına yardımcı olmak amacıyla terimlerin eşdeğerliğini sağlamak için eş anlamlılar tanımlamanız gerekir.

Eş anlamlılar, iyi bilinen _dictionaryEntry ş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, noktalama işareti içermeyen kelimeler veya 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 özgü 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 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." kelimelerini içeren öğelerle eşleşir.

Eş anlamlılar çift yönlü uygulanmaz. Bunun yerine "science fiction," sorgusu için arama yapılırsa Cloud Search sorguya herhangi bir eş anlamlı uygulama yapmaz. Sorgu yalnızca "science fiction." içeren öğelerle eşleşirse "scifi" içeren öğeler atlanır.

Her iki terimin 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 işareti ve diğer noktalama işaretleri kaldırılır. "sci-fi" kullanıcı sorgusu, _term "sci fi." ile eşleşir. Kullanıcılar tarafından kısa çizgiyle yazılabilecek terimlerin eş anlamlılarını oluşturmak için önce kısa çizgi yerine boşluk kullanılacak şekilde _term normalleştirin.

Örnekten devam edersek, aşağıdaki tanımlar "sci-fi," "sci fi," "scifi," ve "science fiction" için birbirinin yerine kullanılabilir:

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 genelinde 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'sını kullanarak global 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, bir CSV dosyası kaydına göre terimi ve eş anlamlıyı temsil eden bir RepositoryDoc oluşturmayı göstermektedir:

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 alanda herkese açık olması gerekir. Yukarıdaki örnekte bu işlem EKL'nin DOMAIN_PUBLIC_ACL olarak ayarlanmasıyla gerçekleştirilir.
  • Aşağıdaki özellikler, kodunuzdaki herkese açık alan ayarını geçersiz kıldığından yapılandırma dosyanız için tanımlanmamalıdır:
    • defaultAcl.mode=FALLBACK
    • defaultAcl.public=true

Arama uygulamasına özgü eş anlamlıları tanımlayabilirsiniz.

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

Ancak kuruluşunuzda ayrı mühendislik ve satış ekipleri olduğunu ve her ekibe iş rolüne ö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ı, satışa özgü veri kaynağı ve eş anlamlıları içeren başka bir arama uygulaması oluşturabilirsiniz. Bu hedefi gerçekleştirmek için belirli bir veri kaynağındaki her eş anlamlıyı _onlyApplicableForAttachedSearchApplications=true kullanarak 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);