הגדרה של מילים נרדפות

לארגונים יש לעיתים קרובות טרמינולוגיה ייחודית או כמה דרכים להתייחס לאותו מושג. הגדרת מילים נרדפות יוצרת שוויון בין מונחים, ועוזרת למשתמשים למצוא פריטים במהלך חיפושים.

אפשר להגדיר מילים נרדפות על ידי יצירת אינדקס לפריטים באמצעות סכימת _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 של מחבר התוכן כדי להגדיר מונחים ומילים נרדפות. פרטים נוספים זמינים במאמר בנושא יצירת מחבר תוכן.

קטע הקוד הזה יוצר 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);