我有一个问题要用查询“节能电视”来实现elasticsearch。我有3个带有"title“字段的对象:
T1:带有LG应用程序的手机是一款节能电视
T2:电视由节能 LG应用制造
T3:带有LG应用程序的手机确保最佳节能
然后,我使用"match“和" and ”操作符查询“节能电视”:
GET my_index/_search
{
"query": {
"match": {
"title": {
"query": "energy saving tv",
"operator": "and"
}
}
}
}结果:
所以T2的分数比T1的分数要高,但是我想要有“节能*电视”形式的标题(按关键字中单词的顺序排列)会有更高的分数。请帮帮我。非常感谢!
发布于 2021-11-12 01:33:14
您可以使用匹配短语查询来匹配由多个单词组成的短语。
{
"query": {
"match_phrase": {
"title": "energy saving tv"
}
}
}请注意,这将只与T1匹配,因为保留了确切的顺序。
如果您还希望包含其他结果,并将其与更多的混合或分散的词序分开,则可以添加slop参数。
这也将与T2相匹配,但得分较低:
{
"query": {
"match_phrase": {
"title": {
"query": "energy saving tv",
"slop": 10
}
}
}
}slop基本上定义了查询项向右或向左移动的频率上限,以便与文档匹配。它默认为0。
例如,从查询"energy saving tv"到文档"energy tv saving"需要一个slop of 2,因为tv向左移动一个术语,saving向右移动一个术语。
请参阅这个答案获得一个很好的视觉解释。
https://stackoverflow.com/questions/69926360
复制相似问题