ใครสามารถให้คำแนะนำในเรื่องต่อไปนี้โปรด?
ฉันใช้ searchkick / elasticsearch และต้องการค้นหาคำสำคัญหรือคำในหลายฟิลด์ (ชื่อ ผู้ผลิต) ตัวอย่างเช่น หากฉันกำลังค้นหาผลิตภัณฑ์ชื่อ "myproduct" ทำให้ "ผู้ผลิตบางราย" ของฉัน ฉันคาดหวังว่าจะเห็นผลลัพธ์นี้ปรากฏขึ้นหากฉันค้นหา "myproduct", "somemanufacturer" หรือ "myproduct somemanufacturer" เนื่องจากทั้งสองคำนี้รวมอยู่ด้วย ในฟิลด์ชื่อหรือผู้ผลิต
ปัญหาของฉันมีดังต่อไปนี้:
@products = Product.search query
อนุญาตคำค้นหาทั้งหมดที่แสดงไว้ด้านบนและส่งกลับผลลัพธ์ที่คาดหวังทันทีที่ฉันเพิ่ม
@products = Product.search query, fields: [:name, :manufacturer_name]
โดยจะส่งกลับผลลัพธ์สำหรับ "myproduct" หรือ "somecompany" เท่านั้น แต่จะไม่ส่งคืน "myproduct somecompany"
ตอนนี้ไม่ใช่เรื่องใหญ่เนื่องจากฉันสามารถลบตัวเลือกฟิลด์ทั้งหมดได้ แต่ฉันต้องใช้ searchkicks word_start สำหรับฟิลด์ชื่อ ดังนั้นคำถามสุดท้ายของฉันจึงเป็นดังนี้:
@products = Product.search query, fields: [{name: :word_start}, :manufacturer_name]
ฉันต้องการให้ผู้ใช้ค้นหาสตริงที่ 1 ของผลิตภัณฑ์และสามารถป้อนผู้ผลิตได้เช่นกัน เช่น "myprod somecompany" น่าเสียดายที่สิ่งนี้ส่งคืนผลลัพธ์เป็นศูนย์เมื่อฉันหวังว่ามันจะส่งคืนผลิตภัณฑ์ชื่อ myproduct ซึ่งผลิตโดย somecompany
ฉันพลาดบางสิ่งที่ชัดเจนที่นี่ไปหรือเปล่า? เปลี่ยนเพิ่มได้นะครับ
operator: 'or'
แต่จริงๆ แล้ว ฉันต้องการที่จะแยกการค้นหาชื่อ เพิ่มคำศัพท์เพิ่มเติม และหากทั้งสองรายการปรากฏสำหรับบันทึกใดรายการหนึ่ง ก็จะถูกส่งกลับ
นี่คือรหัสรุ่นของฉันด้วย
class Product < ActiveRecord::Base
searchkick word_start: [:name]
end
ขอบคุณ