تم طلب القرب Solr مقابل غير مرتبة
سؤال
في SOLR ، يمكنك إجراء بحث عن القرب المطلوب باستخدام بناء الجملة
"word1 word2"~10
حسب الطلب ، أعني أن Word1 سيأتي دائمًا قبل Word2 في المستند. أود أن أعرف ما إذا كانت هناك طريقة سهلة لإجراء بحث عن القرب غير المرتبة ، أي. تحدث Word1 و Word2 في 10 كلمات من بعضهما البعض ولا يهم الأمر أولاً.
طريقة واحدة للقيام بذلك ستكون:
"word1 word2"~10 OR "word2 word1"~10
ما سبق سيعمل ولكني أبحث عن شيء أبسط ، إن أمكن.
المحلول
SLOM يعني عدد تحويلات الكلمات التي يمكن أن تحدث. لذلك سيكون "AB" مختلفًا عن "BA" لأنه يُسمح بعدد مختلف من عمليات النقل.
a foo b
لديه مواقف (أ ، 1) ، (فو ، 2) ، (ب ، 3). يتطلب مطابقة (A ، 1) ، (B ، 2) تغييرًا واحدًا: (B ، 2) => (B ، 3)- ومع ذلك ، لمطابقة (B ، 1) ، (A ، 2) ستحتاج (A ، 2) => (A ، 1) و (B ، 1) => (B ، 3) ، لما مجموعه ثلاثة مواقع الحركات
بشكل عام ، إذا "a b"~n
يتطابق مع شيء ما ، ثم "b a"~(n+2)
سوف تطابقها أيضًا.
تحرير: أعتقد أنني لم أعطى إجابة. أرى خيارين:
- إذا كنت تريد انخفاضًا في n ، فزدها إلى n+2
- تفكيك يدويًا بحثك كما اقترحت
أعتقد أن #2 ربما يكون أفضل ، إلا إذا كان الانحدار كبيرًا جدًا لتبدأ.
نصائح أخرى
هل أنت متأكد من أنه لا يعمل بالفعل هكذا؟ لا يوجد شيء في الوثائق التي تقول إنها "مرتبة":
يمكن إجراء بحث عن القرب باستخدام استعلام عبارة قذرة. كلما اقترب المصطلحان معًا في المستند ، كلما زادت النتيجة. يحدد استعلام عبارة قذرة الحد الأقصى "للانحدار" ، أو يجب نقل عدد المواضع المميزة للحصول على تطابق.
سيجد هذا المثال الخاص بمعالج الطلب القياسي جميع المستندات التي تحدث فيها "Batman" ضمن 100 كلمة من "فيلم":
منذ SOLR 4 ، من الممكن مع internqueryparser.
على سبيل المثال ، إجراء بحث مرتبة (استعلام حيث "العبارة الثانية" تتبع "العبارة" واحدة "ليس أبعد من 3 كلمات بعد):
3W(phrase W one, phrase W two)
للقيام بالبحث غير المرتبة (استعلام "العبارة الثانية" على مقربة من 5 كلمات من "العبارة واحدة"):
5N(phrase W one, phrase W two)