سؤال

أنا أستخدم محرك تطبيق Google (Java) مع JDO. كيف يمكنني أن أفعل ما يعادل JDO

select * from table where field like '%foo%'

التوصية الوحيدة التي رأيتها حتى الآن هي استخدام لوسن. أنا مندهش من الفاجحة أن هذا ما لا يمكن أن يكون هذا الأساسي على GAE خارج الصندوق.

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

المحلول

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

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

نصائح أخرى

TL؛ دكتور: إدارة خاصية البحث متعددة القيمة الخاصة بك وأداء الاستفسارات المساواة ضدها.

تفاصيل:لأولئك الذين يبحثون عن شيء بسيط و DIY، يمكنك القيام بما يلي:

  1. على كيانك، قم بإنشاء قيمة متعددة searchTerms خاصية. سيحتوي ذلك على العناصر القابلة للبحث عن الكيان.

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

  3. لإجراء بحث، قم بتقسيم مدخلات البحث في الكلمات (أداء النظير الأساسي إذا لزم الأمر)، وإضافة كل مرشح باستخدام المشغل المساوي مقابل searchTerms خاصية.

    (ال = المشغل على خاصية متعددة القيمة يسأل اذا أي القيمة تساوي المرشح.)

    على سبيل المثال (استخدام. اعترض):

    Query query = dao.ofy().query(Recipe.class);
    for (String term : search.toLowerCase().split(" ")) {
      query = query.filter("searchTerms =", term);
    }
    

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