我正试图通过我的人群索引进行部分搜索。
每个人都有一个标识符(可以是数字,字符串,电子邮件地址)和标签(字符串,数字或任何您想要标记用户的内容)。
我希望能够搜索整个列表并匹配部分字符串。例如,如果我搜索“@ gmail.com”,它应匹配所有在其标识符或标记中都包含“@gmail”的用户。
我一直在尝试多种功能,但无法使其适用于部分搜索。
顺便说一句,我正在使用轮胎红宝石。
当我使用像 gmail.com 这样的通配符搜索时,它很有用,但速度非常慢。
class Person
include Tire::Model::Search
...
settings analysis: {
analyzer: {
email_analyzer: {
"tokenizer" => "standard",
"filter" => "lowercase"
}
}
}
mapping do
indexes :identifier, analyzer: "email_analyzer"
indexes :email, analyzer: "email_analyzer"
indexes :tags_name, analyzer: "keyword"
end
...
def tire_search(search)
query ||= begin
t = search.gsub(/[@\-\+\:]/, " ").strip
t.present? ? "*#{t}*" : ""
end
tire.search(load: false, page: page, per_page: per_page) do
query { string query, :default_operator => :AND, :fields => ['identifier', 'email', 'tags_name'] } if query.present?
filter :terms, account_id: [account_id]
end
end
end