作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用Angular 7前端构建Rails 5应用程序。
在这个应用程序中,我正在使用Searchkick(一个Elasticsearch的 gem ),并为一个名为Event的模型建立了索引,该模型具有属性title(字符串)和starts_at(日期时间)。
我希望能够在搜索 Controller 中建立查询,并能够执行以下操作:
def index
args = {}
args[:eventable_id] = params[:id]
args[:eventable_type] = params[:type]
args[:title] = params[:title] if params[:title].present?
if params[:starts_at].present?
args[:starts_at] = {}
args[:starts_at][:gte] = params[:starts_at].to_date.beginning_of_day
args[:starts_at][:lte] = params[:ends_at].to_date.end_of_day
end
@events = Event.search where: args, page: params[:page], per_page: params[:per_page]
end
searchkick text_middle: [:title]
{
"query": {
"bool": {
"must": {
"match_all": {}
},
"filter": [{
"term": {
"eventable_id": "2"
}
}, {
"term": {
"eventable_type": "Space"
}
}, {
"term": {
"title": "nice event"
}
}, {
"range": {
"starts_at": {
"from": "2020-02-01T00:00:00.000Z",
"include_lower": true,
"to": "2020-02-29T23:59:59.999Z",
"include_upper": true
}
}
}]
}
},
"timeout": "11s",
"_source": false,
"size": 10000
}
最佳答案
我建议使用ngram分析器,而不是使用模糊查询。
这是一个ngram分析器的示例:
analyzer: {
ngram_analyzer: {
type: "custom",
tokenizer: "standard",
filter: ["lowercase", "ngram_filter"],
char_filter: [
"replace_dots"
]
}
},
filter: {
ngram_filter: {
type: "ngram",
min_gram: "3",
max_gram: "20",
}
}
max_ngram_diff: 17
name
)映射1个,然后为您的ngram字段(例如
name.ngram
)映射另一个。
name
字段增加10,给
name.ngram
字段增加5,以便首先显示完全匹配。不过,您将不得不玩这个游戏。
gte
和
lte
。这是一个例子:
query:{
bool: {
must: {
range: {date: {gte: params[:date], lte: params[:date], boost: 10}}
}
}
}
关于ruby-on-rails - 如何在Elasticsearch上设置日期和模糊标题搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60194179/
我是一名优秀的程序员,十分优秀!