私は現在、Elasticsearch を広告 Web サイトの検索エンジンとして使用することを選択したプロジェクトに取り組んでいます。
現在、次のビジネスルールがあります。
1 ページあたり 25 の広告を表示します。この 25 個の広告のうち、表示される広告のうち 10 個は「有料広告」であり、残りの 15 個は「無料」である必要があります。25 個すべてが実行された検索に関連している必要があります (つまり、キーワード、地域、価格、カテゴリなど)。
2 つの別々のクエリを使用してこれを実行できることはわかっていますが、これはリソースの膨大な浪費のようです。「サブクエリ」を実行して(それを呼び出すことができる場合)、これらの結果を単一の結果セットに結合することは可能ですか? 1 つのクエリで、elasticsearch から 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"
},
...
}
私が望むのは、これをクエリして、「advertType」が「有料」である 10 個の結果と、「advertType」が「無料」である 15 個の結果を取得できるようにすることです...