【发布时间】:2022-06-18 18:28:48
【问题描述】:
因此,如果用户使用单词 covid 进行搜索,我首先想要所有这些结果,其中句子的标题以单词 covid 开头,然后我想要在标题的其他部分有单词的所有项目有字covid。我怎样才能做到这一点?
我想要更具体的答案,如何使用 searchkick 做到这一点。
【问题讨论】:
标签: elasticsearch elasticsearch-query searchkick
因此,如果用户使用单词 covid 进行搜索,我首先想要所有这些结果,其中句子的标题以单词 covid 开头,然后我想要在标题的其他部分有单词的所有项目有字covid。我怎样才能做到这一点?
我想要更具体的答案,如何使用 searchkick 做到这一点。
【问题讨论】:
标签: elasticsearch elasticsearch-query searchkick
如果您使用默认映射,您可以使用带有两个should 子句的bool 查询,一个在text 上带有match,另一个是在.keyword 子字段上的prefix 查询,如图所示在下面的例子中。
索引示例文档
{
"name" : "foo bar"
}
{
"name" : "bar foo"
}
搜索查询
{
"query": {
"bool": {
"should": [
{
"match": {
"name" : "foo"
}
},
{
"prefix": {
"name.keyword": "foo"
}
}
]
}
}
}
搜索结果
"hits": [
{
"_index": "71998426",
"_id": "1",
"_score": 1.1823215,
"_source": {
"name": "foo bar"
}
},
{
"_index": "71998426",
"_id": "2",
"_score": 0.18232156,
"_source": {
"name": "bar foo"
}
}
]
注意:第一个结果,foo bar 得分要高得多,并且在搜索结果中排在首位。
【讨论】:
你甚至可以使用 boost 我猜对 @Amit 代码的修改很少
"query": {
"bool": {
"should": [
{
"match": {
"name" : "covid",
"boost" : 0.5
}
},
{
"prefix": {
"name.keyword": "foo",
"boost" : 1.0
}
}
]
}
}
}```
【讨论】: