searchkick - Searchkick 重新索引,但除非给出完整的单词,否则搜索不起作用
问题描述
我有一个艺术家模型
def search_data
{
name: name,
description: description
}
end
我创造了两位艺术家
Artist.create(name: "Da Vinci", description: "Tortuga")
Artist.create(name: "Donatello", description: "Tortoise")
然后重新索引它们
Artist.reindex
执行一般搜索
Artist.search("*").results
它返回
=> [#<Artist id: 295, name: "Donatello", description: "Tortuga", avatar: nil, cover: nil, created_at: "2018-10-25 13:43:21", updated_at: "2018-10-25 13:43:21">, #<Artist id: 296, name: "Da Vinci", description: "Tortuga", avatar: nil, cover: nil, created_at: "2018-10-25 13:43:52", updated_at: "2018-10-25 13:43:52">]
因此,我得出正确索引的艺术家的结论,我进行了搜索
Artist.search("D").results
但它只会返回
=> [#<Artist id: 296, name: "Da Vinci", description: "Tortuga", avatar: nil, cover: nil, created_at: "2018-10-25 13:43:52", updated_at: "2018-10-25 13:43:52">]
我可以在不搜索“*”的情况下到达多纳泰罗的唯一方法是字面上
Artist.search("Donatello").results
那返回
=> [#<Artist id: 295, name: "Donatello", description: "Tortuga", avatar: nil, cover: nil, created_at: "2018-10-25 13:43:21", updated_at: "2018-10-25 13:43:21">]
我错过了什么?提前致谢。
-- 达普特 --
我想从字面上做这个查询
search("*", page: page, per_page: per_page, where: { _or: [ { name: /.*#{query}.*/ }, { description: /.*#{query}.*/ } ] })
解决方案
看一眼:
部分匹配
默认情况下,结果必须匹配查询中的所有单词。
ruby
Product.search "fresh honey" # fresh AND honey
要更改这一点,请使用:
ruby
Product.search "fresh honey", operator: "or" # fresh OR honey
默认情况下,结果必须匹配整个单词 -back
不会匹配backpack
。您可以通过以下方式更改此行为:
ruby
class Product < ApplicationRecord
searchkick word_start: [:name]
end
并搜索(重新索引后):
ruby
Product.search "back", fields: [:name], match: :word_start
可用选项有:
选项 | 比赛 | 示例 --- | --- | ---
:word
| 整个词| apple
比赛apple
:word_start
| 词首 | app
比赛apple
:word_middle
| 单词的任何部分 | ppl
比赛apple
:word_end
| 词尾 | ple
比赛apple
:text_start
| 正文开始 | gre
匹配green apple
,app
不匹配
:text_middle
| 文本的任何部分 | een app
比赛green apple
:text_end
| 正文结束 | ple
匹配green apple
,een
不匹配
默认值为:word
. 大多数匹配将发生在:word_middle
.
推荐阅读
- powershell - powershell:管道获取内容到带有参数的ps1文件
- api - 模拟后端假 API 服务器的最佳实践或工具?
- regex - 替换ini文件中的块文本
- javascript - 如何在 tsx 中分配参数?
- apache-spark - 来自 DynamoDB Json 的 Spark 取消嵌套嵌套模式
- html - 网站未在本地使用导入的 Google 字体,但在 codepen 中工作
- reactjs - Next.js | 有什么方法可以呈现 .xml 文件?
- java - Java JDBC SQL 查询结果不一致
- android - 如何确定 Android App 的 SDK 级别?
- java - 当 gps 关闭时,.isProviderEnabled(LocationManager.NETWORK_PROVIDER) 总是返回 false?