タグのコレクションを持つ投稿の一般的な例を考えると、各タグを文字列以上のものにする必要があるとしましょう。ただし、文字列とそのタグの強度を示す double のタプルです。
1 つのクエリがどのように投稿し、タグの強度の合計に基づいてこれらをスコアリングするか (タグ名で正確な用語を検索していると仮定しましょう)
タグのコレクションを持つ投稿の一般的な例を考えると、各タグを文字列以上のものにする必要があるとしましょう。ただし、文字列とそのタグの強度を示す double のタプルです。
1 つのクエリがどのように投稿し、タグの強度の合計に基づいてこれらをスコアリングするか (タグ名で正確な用語を検索していると仮定しましょう)
これは、タグをネストされたドキュメントとしてインデックス化し、ネストされたクエリをカスタム スコアクエリと組み合わせて使用することで実行できます。以下の例では、terms クエリは一致するタグを見つけ、カスタム スコア クエリは "tags" ドキュメントの "wight" フィールドの値をスコアとして使用し、ネストされたクエリはこれらのスコアの合計を最上位ドキュメントの最終スコアとして使用しています。 .
curl -XDELETE 'http://localhost:9200/test-idx'
echo
curl -XPUT 'http://localhost:9200/test-idx' -d '{
"mappings": {
"doc": {
"properties": {
"title": { "type": "string" },
"tags": {
"type": "nested",
"properties": {
"tag": { "type": "string", "index": "not_analyzed" },
"weight": { "type": "float" }
}
}
}
}
}
}'
echo
curl -XPUT 'http://localhost:9200/test-idx/doc/1' -d '{
"title": "1",
"tags": [{
"tag": "A",
"weight": 1
}, {
"tag": "B",
"weight": 2
}, {
"tag": "C",
"weight": 4
}]
}
'
echo
curl -XPUT 'http://localhost:9200/test-idx/doc/2' -d '{
"title": "2",
"tags": [{
"tag": "B",
"weight": 2
}, {
"tag": "C",
"weight": 3
}]
}
'
echo
curl -XPUT 'http://localhost:9200/test-idx/doc/3' -d '{
"title": "3",
"tags": [{
"tag": "B",
"weight": 2
}, {
"tag": "D",
"weight": 4
}]
}
'
echo
curl -XPOST 'http://localhost:9200/test-idx/_refresh'
echo
# Example with custom script (slower but more flexable)
curl -XGET 'http://localhost:9200/test-idx/doc/_search?pretty=true' -d '{
"query" : {
"nested": {
"path": "tags",
"score_mode": "total",
"query": {
"custom_score": {
"query": {
"terms": {
"tag": ["A", "B", "D"],
"minimum_match" : 1
}
},
"script" : "doc['\''weight'\''].value"
}
}
}
},
"fields": []
}'
echo