سؤال

أحاول تنفيذ البحث الأوجه أو وضع علامات تصفية متعددة العلامات. في الملاحة الأوجه، يتم عرض الفئات غير الفارغة فقط وعدد العناصر في الفئة التي تتطابق أيضا مع المعايير المطبقة بالفعل في قوسين.

يمكنني الحصول على جميع العناصر التي تم تعيين الفئات المعينة باستخدام الإنضمام الداخلية و الحصول على عدد العناصر في جميع الفئات باستخدام العد والجماعة, ومع ذلك، لست متأكدا من كيفية قياسها لملايين الأشياء والآلاف من العلامات. خاصة العد.

أعلم أن هناك بعض الحلول غير التقليدية مثل لوسين + سولر, ، لكنني عثرت أيضا على بعض التطبيقات المستندة إلى RDBMS المصدر والمصدر الذي يقال إن قوة Entriprise - FaceTmap.com. أو Endeca. البرنامج، لذلك يجب أن تكون هناك طريقة فعالة لأداء البحث الأوجه في قواعد البيانات العلائقية.

هل لدى أي شخص خبرة في البحث الأوجه ويمكن أن يعطي بعض النصائح؟

ذاكرة التخزين المؤقت التهم لكل فئة مجموعة؟ ربما استخدم بعض التقنيات الإضافية الذكية التي ستقوم بتحديث العدادات؟

يحرر:

مثال على الملاحة الأوجه يمكن العثور عليها هنا: فلامنكو.

حاليا لدي مخطط القياسي 3 الجدول (العناصر والعلامات والأعماد_تاجر مثل الموصوف هنا: http://www.pui.ch/phred/archives/2005/04/tags-database-schemas.html#toxi. ) بالإضافة إلى جدول للرجال. كل علامة قد عينت جوانب.

هل كانت مفيدة؟

المحلول

لا أستطيع إلا تأكيد ما يقوله نيلز. RDBMS ليست جيدة للبحث متعدد الأبعاد. لقد عملت مع بعض الحلول الذكية وعدادات التخزين المؤقتة، باستخدام المشغلات وما إلى ذلك. ولكن في النهاية، يفوز مفهرس خارجي مخصص دائما.

ربما، إذا قمت بتحويل بياناتك إلى طراز الأبعاد وإطعامها إلى بعض OLAP [أعني محرك MDX] - سيؤدي ذلك بشكل جيد. ولكن يبدو أنه حل ثقيل للغاية، وسوف يكون بالتأكيد في الوقت الحقيقي.

على العكس من ذلك، حل مع محرك فهرسة مخصص (فكر في لوسن، فكر أبو الهول) يمكن أن يكون قريبا في الوقت الحقيقي مع تحديثات فهرس تدريجية.

نصائح أخرى

IMO، قواعد البيانات العلائقية ليست جيدة في البحث. سوف تحصل على أداء أفضل من محرك بحث مخصص (مثل Solr / Lucene).

البحث في الأوجه هو مشكلة تحليلية، مما يعني التصميم الأبعاد هو رهان جيد. ويعرف أيضا باسم، الشيء الذي تبحث عنه يجب أن يكون في شكل جدول.

قم بتضمين جميع أعمدة الاهتمام في طاولتك التحليلية.

ضع القيم المستمرة في دلاء.

استخدم أعمدة منطقية عن "العديد من العناصر" مثل الفئات أو العلامات، مثال إذا كانت هناك ثلاث علامات "Foo"، و "Bar"، و "Baz"، سيكون لديك ثلاثة أعمدة منطقية.

استخدم طريقة عرض مخصصة لإنشاء طاولتك التحليلية.

فهرسة حماقة من ذلك. بعض فهارس دعم قواعد البيانات لهذا النوع من التطبيقات.

مرشح فقط مرة واحدة.

الاتحاد نتائجك.

بناء وجهات النظر المجمعة مسبقا للاستعلامات المشتركة.

هذه المقالة قد تساعدك أيضا: https://blog.jooq.org.org.org/2017/04/20/How-To-Calculate-Multiple-Ggregate-Functions-in-A-Single-Query/

with filtered as (
    select
    *
    from cars_analytic
    where
        [some search conditions]
)

--for each facet:

select
    'brand' as facet,
    brand as value,
    count(*) as count
from
    filtered
group by
    brand

union

select
    'cool-tag' as facet,
    'cool-tag'as value,
    count(*) as count
from
    filtered
where
    cool_tag

union

...


-- sort at the end
order by
    facet,
    count desc,
    value

100000 سجل مع 5 جوانب في ~ 150 مللي ثانية

فيما يتعلق بالتهم، لماذا سحبها عبر SQL؟ يجب عليك التكرار من خلال النتيجة الموجودة في التعليمات البرمجية الخاصة بك على أي حال، فلماذا لا تجعل العد هناك؟

أنا حاليا باستخدام هذا النهج في تطبيق بحث في الأوجه، وأنا أتطريز وأنه يعمل بشكل جيد. الجزء الصعب الوحيد هو إعداد التعليمات البرمجية لعدم إخراج الوجه حتى يصل إلى جوانب جديدة. في ذلك الوقت، خرج الوجه وعدد الصفوف التي وجدتها لذلك.

يفترض هذا النهج أنك تسحب قائمة بجميع العناصر المطابقة، وبالتالي، صفوف متعددة مع نفس الوجه. عند طلب هذه النتيجة حسب الوجه، من السهل الحصول على العد في التعليمات البرمجية بدلا من ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top