سؤال

وأنا جديدة على أبو الهول، وأنا seting عنه على الموقع الجديد. انها تعمل بشكل جيد، وعندما بحث مع بحث في وحدة التحكم، عمل كل شيء.

وباستخدام PHP المعهد والبحث، يعطيني نفس النتائج أيضا. لكنه يتيح لي فقط هويات والأوزان للصفوف وجدت. هل هناك طريقة لجلب بعض حقول النص TOGHETER مع التجزئة في "المباريات"، على سبيل المثال؟

وإذا كان هناك أي وسيلة للقيام بذلك، هل لديها فكرة جيدة عن كيفية استرداد السجلات من قاعدة البيانات (SQL) في ترتيب أبو الهول الوزن نوع (البحث عن لهم في نفس الوقت)؟

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

المحلول

ويمكنك استخدام استدعاء دالة الخلية FIELD () في ORDER BY الخاص بك لضمان كل شيء في أبو الهول الترتيب المحدد.


$idlist = array();
foreach ( $sphinx_result["matches"] as $id => $idinfo ) {
    $idlist[] = "$id";
}
$ids = implode(", ", $idlist);

SELECT * FROM table WHERE id IN ($ids) ORDER BY FIELD(id, $ids)

نصائح أخرى

نعم، أبو الهول لا يحقق النتائج. ولكن اكتشفت طريقة بسيطة لإعادة ترتيب الاستعلام باستخدام جملة IN ()، لتحقيق كل ذلك معا.

وQuering شيء

SELECT * FROM table WHERE id IN(id_list... )

وفقط فهرسة نتيجة لذلك، مع رقم في الجدول:

while ($row = mysql_fetch_objects)
   $result[$row->id] = $row; 

ووجود نتائج مطابقة من أبو الهول، من السهل جدا لإعادة ترتيب:

$ordered_result = array();
foreach ($sphinxs_results['matches'] as $id => $content)
   $ordered_result[] = $result1[$id];

وهذا يجب العمل، إذا sphinxs_results $ لديك هي في الترتيب الصحيح.

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

والحقول unfortually أبو الهول لم العوائد الملائمة، إلا هويات لها (لم مؤشر أبو الهول لا يحتوي على بيانات - التجزئة فقط من البيانات). أضف حول هذه المشكلة يمكنك العثور على المنتدى sphinxsearch.com.

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

results = db.query("SELECT * FROM table WHERE id IN (%s)", matches.join(", "));
ordered_results = [];

for (match in matches) {
  for (result in results) {
    if (result["id"] == match) {
      ordered_results << result;
    }
  }
}

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