tl; dr:我想要一个匹配每个令牌最多一次的查询
鉴于我的弹性搜索索引包含以下词语:
["stackoverflow", "overflow", "awesome", "some"]
是否存在匹配的弹性搜索查询
句子“ stackoverflow 社区很棒”上的"stackoverflow"
和"awesome"
与"overflow"
和"some"
不匹配?
我不能只用分数来做,因为还包括拼写错误检测。
我正在寻找的东西就像是消费匹配。不幸的是,到目前为止我找不到合适的东西:(
谢谢!
更多详情:
索引文档看起来像这样
{"name": "stackoverflow",
"type": "brand"},
{"name": "awesome",
"type": "descriptor"},
{"name": "overflow",
"type": "brand"},
{"name": "some",
"type": "descriptor"}
我的查询如下:
{
"min_score": 1,
"query": {
"match": {
"name": {
"query": "stakoverflow community is awesom",
"fuzziness": 2
}
}
},
"rescore": {
"window_size": 10,
"query": {
"rescore_query": {
"match": {
"name": "stakoverflow community is awesom"
}
},
"query_weight": 0.9,
"rescore_query_weight": 1.1
}
}
}
所以我基本上会尝试在第一个查询中捕捉拼写错误,并且更喜欢重新排列错误拼写错误。
我想要实现的目标:
对于每个令牌,我最多只能有一场比赛:
INPUT stakoverflow community is awesom
OUTPUT stackoverflow <nothing> <nothing> awesome
我的问题是,我还会返回溢出和某些。溢出甚至可能比令人敬畏的得分更好,因为它不是拼写错误。