如何解决如何在 Elasticsearch 查询中优先处理文档
我的索引中有产品。文档的基本结构如下:
{
"_id": "product","_source": {
...
"type": "product","id": 1,"mainTaxon": {
"name": "T-SHIRT",},"attributes": [
{
"code": "name","name": "Name","value": [
"BANANA T-SHIRT"
],"score": 50
},]
}
},{
"_id": "product","id": 2,"mainTaxon": {
"name": "JEANS","value": [
"BANANA JEANS"
],]
}
}
}
当我搜索“BANANA
”时,我会优先考虑mainTaxon
与JEANS
不同的产品。因此,具有 mainTaxon
名称 T_SHIRT
或其他名称的每个产品都将列在具有 mainTaxon
JEANS
的产品之前。
解决方法
您可以使用 boosting query 对文档进行优先排序
{
"query": {
"boosting": {
"positive": {
"match": {
"attributes.value": "banana"
}
},"negative": {
"match": {
"mainTaxon.name": "JEANS"
}
},"negative_boost": 0.5
}
}
}
搜索结果将是
"hits": [
{
"_index": "67164768","_type": "_doc","_id": "1","_score": 0.5364054,"_source": {
"type": "product","id": 1,"mainTaxon": {
"name": "T-SHIRT"
},"attributes": [
{
"code": "name","name": "Name","value": [
"BANANA T-SHIRT"
],"score": 50
}
]
}
},{
"_index": "67164768","_id": "2","_score": 0.32743764,"id": 2,"mainTaxon": {
"name": "JEANS"
},"value": [
"BANANA JEANS"
],"score": 50
}
]
}
}
]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。