دليل لزيادة صلة نتائج البحث وتطوير استراتيجيات التسجيل المخصصة في تطبيقات التجارة الإلكترونية باستخدام Elasticsearch
بالنسبة لمنصات التجارة الإلكترونية، يعد محرك البحث القوي أحد الركائز الأساسية لتجربة المستخدم ونجاح المبيعات. ومع ذلك، مع نمو كتالوج المنتجات وتزايد توقعات المستخدمين، غالبًا ما تكون خوارزميات البحث الافتراضية غير كافية. في هذه المقالة، سنتعلم كيفية ضبط دقة نتائج بحث التجارة الإلكترونية الخاصة بك باستخدام محرك البحث مفتوح المصدر العالمي Elasticsearch، وكيفية تقديم نتائج أكثر دقة وإرضاءً لمستخدميك باستخدام تقنيات التسجيل المخصصة.
الصلة الأساسية وخوارزمية BM25 في Elasticsearch
يقوم Elasticsearch، افتراضيًا، بترتيب نتائج البحث باستخدام خوارزمية BM25 (Okapi BM25). تحسب هذه الخوارزمية درجة (_score) من خلال مراعاة عوامل مثل تكرار الكلمة في مستند (TF - Term Frequency) وندرتها عبر الفهرس بأكمله (IDF - Inverse Document Frequency). ومع ذلك، في التجارة الإلكترونية، قد لا يكون المطابقة النصية وحدها كافية. على سبيل المثال، في بحث عن "هاتف"، قد ترغب في إعطاء الأولوية للهواتف الأكثر مبيعًا أو الأحدث.
تعزيز الحقول (Boosting Fields)
يمكننا استخدام التعزيز للإشارة إلى أن حقولًا معينة (مثل اسم_المنتج أو العلامة_التجارية) أكثر أهمية من الحقول العامة مثل وصف_المنتج. هذه طريقة بسيطة ولكنها فعالة لضبط الصلة.
GET /products/_search
{
"query": {
"multi_match": {
"query": "samsung phone",
"fields": [
"product_name^3",
"brand^2",
"product_description"
]
}
}
}في المثال أعلاه، تم تعزيز حقل اسم_المنتج بعامل 3، وحقل العلامة_التجارية بعامل 2، مما يزيد من مساهمتهما في النتيجة الافتراضية.
التسجيل المخصص: استعلام function_score
للمنطق الأكثر تعقيدًا للصلة، يأتي استعلام function_score في المقدمة. يتيح لك هذا الاستعلام تعديل درجة المستند عن طريق تطبيق دالة مخصصة لكل مستند. تتضمن بعض الوظائف الشائعة التي يمكنك استخدامها ضمن function_score ما يلي:
boost_factor: يضيف مضاعفًا ثابتًا للدرجة الحالية.field_value_factor: يسجل بناءً على قيمة حقل رقمي.random_score: يضيف درجة عشوائية (لأغراض اختبار A/B أو الاكتشاف).decay_functions: يقلل من الدرجة بناءً على قرب حقل رقمي من قيمة معينة أو حداثة حقل التاريخ (مثلgauss،exp،linear).script_score: يسمح لك بكتابة منطق تسجيل مخصص بالكامل باستخدام لغة البرمجة Painless. هذا هو الخيار الأكثر مرونة.
مثال 1: التسجيل حسب الشعبية وحالة المخزون (field_value_factor)
في التجارة الإلكترونية، غالبًا ما يكون إعطاء الأولوية للمنتجات الشائعة أو المنتجات ذات المخزون الوفير طلبًا شائعًا. يمكننا القيام بذلك بسهولة باستخدام field_value_factor:
GET /products/_search
{
"query": {
"function_score": {
"query": {
"multi_match": {
"query": "smart watch",
"fields": ["product_name", "brand", "features"]
}
},
"functions": [
{
"field_value_factor": {
"field": "sales_count",
"modifier": "log1p",
"factor": 1.2
}
},
{
"field_value_factor": {
"field": "stock_quantity",
"modifier": "sqrt",
"factor": 0.5
}
}
],
"score_mode": "multiply",
"boost_mode": "multiply"
}
}
}يتضمن هذا الاستعلام عدد المبيعات (بزيادته لوغاريتميًا باستخدام log1p) وكمية المخزون (بأخذ جذرها التربيعي باستخدام sqrt) في النتيجة لعمليات البحث عن "الساعة الذكية". تحدد score_mode و boost_mode كيفية دمج الدرجات من وظائف متعددة أو الاستعلام الرئيسي.
مثال 2: إعطاء الأولوية للمنتجات الجديدة (decay_functions)
لجعل المنتجات المضافة حديثًا أكثر وضوحًا، يمكننا استخدام decay_functions. يعطي المثال أدناه درجة أعلى للمنتجات الأحدث بناءً على حقل تاريخ_الإضافة:
GET /products/_search
{
"query": {
"function_score": {
"query": {
"match": {
"product_name": "laptop"
}
},
"functions": [
{
"gauss": {
"added_date": {
"origin": "now",
"scale": "30d",
"offset": "7d",
"decay": 0.5
}
}
}
],
"boost_mode": "multiply"
}
}
}origin: "now": نقطة المركز هي الوقت الحالي.scale: "30d": يبدأ تدهور الدرجة في غضون 30 يومًا.offset: "7d": لأول 7 أيام، تكون الدرجة كاملة؛ لا يبدأ التدهور.decay: 0.5: يخفض الدرجة إلى نصف الدرجة الأصلية عندما تكون بعيدة بقيمةscale.
مثال 3: تسجيل النص البرمجي للمنطق المعقد (Painless)
عندما تريد دمج حقول متعددة أو منطق عمل مخصص، يأتي script_score في المقدمة. على سبيل المثال، قد ترغب في إعطاء الأولوية للمنتجات التي تحمل علامة "مخفضة"، والمنتجات الشائعة في فئة معينة، والمنتجات القريبة من نقطة سعر معينة، كل ذلك في وقت واحد.
GET /products/_search
{
"query": {
"function_score": {
"query": {
"bool": {
"must": { "match": { "product_name": "headphones" } },
"should": [
{ "term": { "category.keyword": "gaming_accessories" } },
{ "term": { "tags.keyword": "discounted" } }
]
}
},
"functions": [
{
"script_score": {
"script": {
"source": """
double custom_score = _score;
// Prioritize discounted products more
if (doc['tags.keyword'].contains('discounted')) {
custom_score *= 1.5;
}
// Boost products in the gaming accessories category with an extra bonus
if (doc['category.keyword'].contains('gaming_accessories')) {
custom_score *= 1.3;
}
// Slight bonus for products with high stock quantity
if (doc['stock_quantity'].size() > 0 && doc['stock_quantity'].value > 100) {
custom_score *= 1.1;
}
return custom_score;
"""
}
}
}
],
"boost_mode": "multiply"
}
}
}يزيد هذا النص البرمجي ديناميكيًا من الدرجة بناءً على ما إذا كان المنتج "مخفضًا"، أو ينتمي إلى فئة "ملحقات الألعاب"، وكمية مخزونه، بالإضافة إلى درجة BM25 الأساسية. تعد نصوص Painless البرمجية قوية جدًا وتسمح لك بتنفيذ أي نوع من منطق الأعمال تقريبًا.
أفضل الممارسات والاعتبارات
- النهج التكراري: تحسين الصلة عملية مستمرة. طبق التغييرات بخطوات صغيرة، واختبر، وقيّم النتائج باستخدام ملاحظات المستخدم أو تحليلات البحث.
- الأداء: خاصة عند استخدام
script_score، انتبه إلى تعقيد النصوص البرمجية. يمكن أن تؤثر النصوص البرمجية المعقدة جدًا سلبًا على أداء البحث. يفضل أنواعfunction_scoreالأبسط إن أمكن. - مراقبة سلوك المستخدم: تتبع عمليات البحث التي تؤدي إلى أي منتجات، والمنتجات التي ينقر عليها المستخدمون، ومعدلات التحويل لتحسين استراتيجيات التحسين الخاصة بك.
- استخدام التخزين المؤقت: يمكن أن يؤدي تخزين النتائج مؤقتًا لعمليات البحث المتكررة إلى تحسين الأداء.
الخلاصة
في مواقع التجارة الإلكترونية، يعد تمكين المستخدمين من العثور على المنتج المناسب بسرعة أمرًا بالغ الأهمية. بفضل آليات التسجيل القوية في Elasticsearch واستعلام function_score، يمكنك تجاوز المطابقات النصية البحتة لتقديم نتائج بحث ديناميكية وذكية مصممة خصيصًا لمنطق عملك. من خلال تطبيق هذه التقنيات، ستثري تجربة بحث المستخدمين لديك وتزيد مبيعاتك.
التعليقات (0)
لا توجد تعليقات بعد. كن أول من يعلق!