我目前正忙于一个项目,我们选择使用 Elasticsearch 作为分类网站的搜索引擎。
目前,我有以下业务规则:
每页列出 25 个广告。在这 25 个中,显示的广告中有 10 个必须是“付费广告”,另外 15 个必须是“免费”。所有 25 项必须与执行的搜索相关(即关键字、地区、价格、类别等)
我知道我可以使用两个单独的查询来做到这一点,但这似乎是对资源的巨大浪费。是否可以进行“子查询”(如果您可以这样称呼它们?)并将这些结果合并到一个结果集中?不知何故,在一个查询中只能从弹性搜索中获取 10 个“付费”广告和 15 个“免费”广告?当然,假设有足够多的广告使这个要求成为可能。
谢谢你的帮助!
编辑- 只需添加我的映射信息以更清晰。
"properties": {
"advertText": {
"type": "string",
"boost": 2,
"store": true,
"analyzer": "snowball"
},
"canonical": {
"type": "string",
"store": true
},
"category": {
"properties": {
"id": {
"type": "string",
"store": true
},
"name": {
"type": "string",
"store": true
},
"parentCategory": {
"type": "string",
"store": true
}
}
},
"contactNumber": {
"type": "string",
"index": "not_analyzed",
"store": true
},
"emailAddress": {
"type": "string",
"store": true,
"analyzer": "url_email_analyzer"
},
"advertType": {
"type": "string",
"index": "not_analyzed"
},
...
}
然后我想要的是能够查询并获得 10 个结果,其中“advertType”:“Paid”和15 个“advertType”:“Free”...