有人可以就以下问题提供建议吗?
我正在使用 searchkick / elasticsearch,并希望在多个字段(名称、制造商)中搜索一个或多个关键术语。因此,例如,如果我正在寻找一个名为“myproduct”的产品使我的“somemanufacturer”成为我的“somemanufacturer”,如果我搜索“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]
我希望用户搜索产品的第一个字符串,并且也能够输入制造商,例如“myprod somecompany”,不幸的是,当我希望它会返回由 somecompany 制造的名为 myproduct 的产品时,这会返回零结果。
我在这里错过了一些非常明显的东西吗?我可以更改添加
operator: 'or'
但我真的希望能够对名称进行部分搜索,添加其他术语,如果两者都存在于特定记录中,它会被返回。
这也是我的模型代码
class Product < ActiveRecord::Base
searchkick word_start: [:name]
end
谢谢