سؤال

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

وعلى سبيل المثال لدي متجر يدعى "FooBar" لكن بلدي الزوار seach ل "فو بار" والحصول على الصفر النتائج. أيضا إذا تم تسمية متجر "فو بار"، ووجد الزوار seaches "FooBar" لا شيء.

وحاولت ل seach ل "foobar ~" (seach غامض) ولكن لم لم يتم العثور المواد المسمى "فو بار"

هل هناك طريقة speciar لبناء الفهرس أو لجعل الاستعلام؟

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

المحلول

والخيار 1: كسر سلسلة الاستعلام الإدخال في جزأين في نقاط مختلفة وتفتيشها. على سبيل المثال. في هذه الحالة الاستعلام سيكون (+ FO شريط +) أو (+ فو + بار) أو (+ foob + ع) والمشكلة هي هذه tokenization يفترض هناك نوعان من الرموز في سلسلة الاستعلام الإدخال. أيضا، قد تحصل على نتائج إضافية، وربما غير ذات صلة، مثل نتائج (+ foob + ع)

والخيار 2: استخدام ن غرام tokenization بينما الفهرسة والاستعلام. أثناء فهرسة الرموز ل "شريط فو" سيكون FO، س س، با، ع. في الوقت الذي تبحث مع foobar، فإن الرموز يكون FO، س س، اوب، با، ع. سيتم البحث مع OR كمشغل تعطيك الوثائق مع أقصى قدر من المباريات ن غرام في الأعلى. وهذا يمكن أن يتحقق مع NGramTokenizer

نصائح أخرى

وإضافة إدخالات الفهرس يدويا عن التباسات الاسم الأكثر شيوعا. الحصول على الزبائن لكتابتها في على شكل خاص.

هل حاولت "* فو * و * شريط *" أو "* * فو OR * شريط *"؟ وهو يعمل في النمس وقرأت أنه يقوم على لوسين.

إذا كنت لا تهتم حول أداء، استخدم WildcardQuery (الأداء هو أسوأ بكثير):

new WildcardQuery( new Term( "propertyName", "Foo?Bar" ) );

لصفر أو أكثر الشخصيات، واستخدام "*"، لصفر أو واحد حرف، واستخدام '؟

إذا الأداء هو المهم، حاول استخدام BooleanQuery.

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