วิธีเพิ่มเขตข้อมูลพิเศษ com_content ในดัชนีการค้นหาอัจฉริยะ


10

ฉันจะหาบทช่วยสอนหรือคำแนะนำในการสร้างปลั๊กอินที่จัดการ "onPrepareFinderContent" ได้จากที่ไหน?

ฉันได้เพิ่มฟิลด์พิเศษลงในบทความ com_content และฉันต้องการให้ดัชนีถูกทำดัชนีโดยเครื่องมือค้นหา

ฉันกำลังมองหาวิธีการเพิ่มองค์ประกอบใหม่ให้กับFinderIndexerResultวัตถุที่กำลังจะถูกทำดัชนี

ฉันเคยเห็นบรรทัดของรหัสนี้ใน plugins / finder / content / content.php ที่บรรทัด 311:

// Get content extras.
FinderIndexerHelper::getContentExtras($item);

ฟังก์ชัน FinderIndexerHelper :: getContentExtras ยอมรับวัตถุ FinderIndexerResult ซึ่งจะถูกจัดทำดัชนีและจากนั้นเรียกใช้เหตุการณ์ "onPrepareFinderContent" ซึ่ง (ฉันสมมติว่า) อนุญาตให้ปลั๊กอิน 3 มิติเพิ่มหรือแก้ไขเนื้อหาที่จะทำดัชนี

บางท่านมีประสบการณ์เกี่ยวกับเรื่องนี้หรือชี้ให้ฉันไปที่การสอน / เอกสารประกอบที่ดี?

คำตอบ:


4

ฉันได้เพิ่มฟิลด์พิเศษใน com_content แล้ว ฉันคิดว่าเนื่องจากวิธีการที่ใช้ในการทำแบบนี้ค่อนข้างกำหนดเองตามที่คุณระบุตารางของคุณเองและดังนั้นจึงไม่มีวิธีการทำซ้ำได้จริง ๆ ซึ่งคุณสามารถใช้เพื่อให้ข้อมูลนี้ถูกรวมเข้ากับ com_finder

ข้อเสนอแนะของฉันคือคุณจะแยกปลั๊กอินตัวสร้างดัชนีเนื้อหาสำหรับโปรแกรมค้นหาแล้วตั้งค่าเพื่อโทรออกไปยังฟิลด์ที่คุณเพิ่ม

สิ่งแรกที่คุณต้องทำคือปรับเปลี่ยน getListQuery ในเครื่องมือค้นหาเพื่อเข้าร่วมในตารางเขตข้อมูลเพิ่มเติมของคุณ:

https://github.com/joomla/joomla-cms/blob/staging/plugins/finder/content/content.php#L341

หลังจากนั้นขึ้นอยู่กับวิธีที่คุณบันทึกเขตข้อมูลพิเศษ (วัตถุ JRegistry?) คุณเพียงแค่ต้องบอกตัวค้นหาเพื่อดูเขตข้อมูลเพิ่มเติมที่คุณมีในแบบสอบถาม

ฉันรู้สึกว่าคุณจะต้องเพิ่มเป็นข้อมูลเมตาบางส่วน: https://github.com/joomla/joomla-cms/blob/staging/plugins/finder/content/content.php#L286

หวังว่านี่จะช่วยได้


3

ทำงานกับปลั๊กอินการค้นหา SobiPro-Smart เราได้เพิ่มเขตข้อมูลพิเศษในgetItemsประมวลผลรายการที่จะจัดทำดัชนีเป็น FinderIndexerResult และใหม่กว่าในดัชนีสำหรับแต่ละรายการเพิ่มคำแนะนำของแต่ละเขตข้อมูลพิเศษ:

protected function index(FinderIndexerResult $item, $format = 'html')
{
...

            $fields = $this->_fields[$item->section];

            foreach ($fields as $f)
            {
                $nid = $f->get('nid');

                if (isset($item->$nid))
                {
                    $item->addInstruction(FinderIndexer::TEXT_CONTEXT, $nid);
                }
            }
...

ขอบคุณคำตอบของคุณทำให้ฉันไปในทิศทางที่ถูกต้อง;) ในที่สุดฉันก็เขียนตัวค้นหาปลั๊กอิน (ขยาย JPlugin) ซึ่งใช้เหตุการณ์ onPrepareFinderContent ฉันเพิ่มคำแนะนำตามที่คุณแสดงและฟิลด์พิเศษที่เกี่ยวข้อง: public function onPrepareFinderContent(FinderIndexerResult &$row) { .... $row->addInstruction(FinderIndexer::TEXT_CONTEXT, $field->id); $row->setElement($field->id, $field->value); .... }
Cristiano

ยอดเยี่ยม คุณต้องทำเครื่องหมายคำถามว่ามีการแก้ไขหรือไม่?
Anibal

@Cristiano: คุณเคยแก้ไขปัญหานี้หรือไม่? ไม่มีคำตอบที่ยอมรับได้และฉันประสบกับปัญหาเดียวกัน - คุณเคยคิดวิธีใช้งานประจำเหล่านี้หรือไม่?
GDP

แม้ว่าคำตอบคือไม่ได้รับการยอมรับจากผู้เขียนต้นฉบับ ... นั่นคือวิธีการทำงานในการค้นหาของฉันปลั๊กอินสมาร์ท ;-)
Anibal
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.