Intro: Solr multi-core + Drupal multi-search + Thai filter with Chef
พักหลังๆ ผมไม่ได้ค่อยสนใจงาน front-end เท่าไหร่ (graphic/template/html/css) เพราะรู้สึกว่าช่วงนี้อะไรๆมันเปลี่ยนเร็วมาก ตามมากแล้วเวียนหัว (แต่เชื่อว่ายังไงๆ HTML + CSS ก็ไม่ตายเพราะทำครั้งเดียวเอามาใช้ได้กับทุกแพลตฟอร์ม) เลยรู้สึกว่างาน back-end มันสนุกกว่า ช่วงนี้เลยรับงานเป็นเสือใบ - ทำทั้งข้างหน้าและข้างหลัง โลกยุคนี้เราสามารถทำอะไรก็ได้ที่เราอยากทำ มีเครื่องมือมากมายให้เราเอามาปรับใช้เพราะหลายๆเรื่องในโลก (opensource) มีคนคิดและทำก่อนเราแล้วทั้งนั้น เรียกมันว่า Crowd Wisdom คงได้มั้ง? เราแค่ต้องค้นหาให้เจอว่าเครื่องมือที่เราจะใช้อยู่ที่ไหน ดังนั้นผมจึงเห็นว่ามันงี่เง่ามากที่ ICT ไทยเอาแต่หาทางจะบล็อคโน่นนี่มากกว่าเปิดหูเปิดตาตัวเอง (ไม่วายแวะเข้าเรื่องการเมือง)
ตั้งใจว่าจะเขียนวิธีติดตั้ง Solr-3.5 multi-core + Drupal-7 multi-search + Thai filter + Dictionary (libthai) + init script แบบอัตโนมัติด้วย Chef (ruby gem) (แต่ก็ดันเผลอโพสต์เรื่องการเมืองก่อนทุกที :) เผื่อใครอยากทำ homemade search engine น่าจะมีประโยชน์กับ developer ไทยนะ เพราะคงยากที่จะมีฝรั่งเขียนเรื่อง Solr กับภาษาไทย (ด้วยภาษาไทย :) ซึ่งภาษาไทยไม่มีช่องว่างระหว่างคำในประโยคเหมือนพวกที่ใช้ตัวอักษร Latin มันเลยต้องการการเอาใจใส่แบบพิเศษหน่อย ที่สำคัญ Solr นั้นเร็วกว่าการใช้ database search มาก ใช้ได้กับ Unix ทั่วไปนะครับ ผมทดสอบใน Debian/Ubuntu กับ Mac OS ยังไม่เคยลองกับ distro อื่นหรือ Windows แต่ถ้าปรับนิดหน่อยก็คงทำได้เหมือนกันมั้ง? เผลอๆ บางคนจะมีวิธีที่ง่ายกว่าที่ผมทำอยู่ก็ได้ จะได้เอาความรู้มาแบ่งกัน
เกริ่นหัวข้อที่ตั้งใจจะเขียนไว้คร่าวๆก่อน เพราะตอนนี้ยังไม่ว่างพอจะใส่รายละเอียด
- ติดตั้ง Ruby & Chef ใช้ Ruby 1.8.7 หรือ 1.9.2 ก็ได้ แต่ใน Ubuntu ต้องติดตั้ง gem from source จะได้ไม่มั่ว เคยลอง apt-get rubygems แล้วมั่วมาก (ทั้ง path และ version) ส่วนใครใช้ RVM อยู่แล้วก็ง่ายขึ้นไปอีก บางคนอาจสงสัยว่า Solr เป็น Java และ Drupal เป็น PHP แล้วจะติดตั้ง Ruby ไปทำแป๊ะอะไร แต่พอเข้าใจ Chef แล้วคุณจะรู้เองว่าทำไม และเราจะรันทุกอย่างเสร็จสรรพภายใน 2 นาที (ไม่รวมเวลาเขียนโค้ดนะ :) ไม่ว่าจะย้ายเซิร์ฟเวอร์กี่ครั้งก็ตาม Chef ช่วยให้เราทำทุกอย่างได้แบบที่ SysAdmin รุ่นเก่าต้องอิจฉา (ขอโม้นิดนึง)
- เขียน Chef cookbook เพื่อ install/config Solr จริงๆเรื่อง cookbook นี่แยกออกมาเขียนเป็นหนังสือทั้งเล่มได้เลยเพราะมันสนุกมาก คุณย้าย server ไปที่ไหนก็ได้ภายใน 5 นาที เพราะตอนนี้ผมใช้ Chef รันทุก process ทั้ง install & config web server, database server, git, php, ruby, java, web apps repositories, etc. ทั้งใน Local Env ใช้ MacOS + VirtualBox, Remote Env ใช้ Ubuntu Linode, ถ้าไม่ขี้เกียจก็เพิ่ม Test Env เข้าไปด้วย ใช้ Amazon EC2 (แต่ส่วนมากผมจะขี้เกียจ :) และใน Local Env ผมขี้เกียจหนักเข้าไปอีก เลยใช้ Veewee + Vagrant ทำ Ubuntu basebox เก็บไว้ใช้งานจะได้ไม่ต้องเสียเวลาติดตั้ง OS ซ้ำๆ แต่อันนั้นเป็นอีกเรื่องนึงนะ ถ้าว่างจะเขียนไว้ด้วย (โม้อีกแล้ว)
- ติดตั้ง Apache Solr multi-core เพื่อรัน instance เดียวแต่แยกเป็นหลาย indexes สำหรับแต่ละ Web App (Drupal) พร้อม init script (daemon / service - run at boot) + basic security
- จัดการ Drupal-7 มี module 2 ตัวให้เลือก คือ ApacheSolr กับ Search API ผมเลือกใช้ Search API กับโปรเจ็คต์นึงที่กำลังทำอยู่ เพราะต้องการทำ multi-search + facet search ที่สามารถกรองเนื้อหาได้หลากหลายรูปแบบ และใช้งานกับ Views ได้สะดวกมากๆ (อันนี้ไม่ได้โม้) แต่สำหรับ webzer.net ผมใช้ ApacheSolr module เพราะไม่จำเป็นต้องใช้ Views กับ Blog เห่ยๆของตัวเอง!
- ปรับแต่ง Solr config + schema เพื่อให้ค้นหาภาษาไทยได้ดีขึ้น เช่น เรียกใช้งาน
solr.ThaiWordFilterFactoryและ java classes อื่นๆ เพื่อพ่วง external lib/data กับ Solr เรื่องนี้ผมก็รู้งูๆปลาๆ มั่วไปเรื่อยๆ แต่ไม่ยากเพราะ config กับ schema เป็นแค่ไฟล์ XML ธรรมดา แค่รู้สึกว่ายังปรับผลการค้นหาไม่ค่อยได้ดั่งใจเท่านั้นเอง บางทีอาจต้องจูนที่ Drupal มากกว่า Solr มั้ง?
หวังว่าคงมีเวลาว่างเขียนต่อ ถ้าโลกไม่เปลี่ยนเร็วเกินไป Software พวกนี้ก็คงจะยังมีประโยชน์สำหรับเราต่อไป ระหว่างนี้ลองอ่าน Chef Wiki เป็นไอเดียไปพลางๆก่อนก็ได้ แรกๆผมก็งงว่ามันคืออะไร เพราะมีทั้ง Chef-solo, Chef-client, Chef-server และ บริการของ Opscode คือ Hosted Chef แต่เราจะใช้ Chef-solo เป็นหลักจะได้ไม่ต้องพึ่งมือที่สามมาก แต่ถ้าใครขี้เกียจเตรียม Local Env ก็ใช้ Hosted Chef ติดตั้งทุกอย่างใน Amazon EC2 แทนได้เลยเหมือนกัน
- gibbo's blog
- 635 reads

