سؤال

في 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) سوف تطابقها أيضًا.

تحرير: أعتقد أنني لم أعطى إجابة. أرى خيارين:

  1. إذا كنت تريد انخفاضًا في n ، فزدها إلى n+2
  2. تفكيك يدويًا بحثك كما اقترحت

أعتقد أن #2 ربما يكون أفضل ، إلا إذا كان الانحدار كبيرًا جدًا لتبدأ.

نصائح أخرى

هل أنت متأكد من أنه لا يعمل بالفعل هكذا؟ لا يوجد شيء في الوثائق التي تقول إنها "مرتبة":

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

سيجد هذا المثال الخاص بمعالج الطلب القياسي جميع المستندات التي تحدث فيها "Batman" ضمن 100 كلمة من "فيلم":

http://wiki.apache.org/solr/solrrelevancyfaq#how_can_i_search_for_one_term_near_another_term_.28say.2c_.22batman.22_and_22movie.22.29

منذ SOLR 4 ، من الممكن مع internqueryparser.

على سبيل المثال ، إجراء بحث مرتبة (استعلام حيث "العبارة الثانية" تتبع "العبارة" واحدة "ليس أبعد من 3 كلمات بعد):

3W(phrase W one, phrase W two)

للقيام بالبحث غير المرتبة (استعلام "العبارة الثانية" على مقربة من 5 كلمات من "العبارة واحدة"):

5N(phrase W one, phrase W two)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top