boostingを使って2つの単語を検索しているのですが、片方しか結果が表示されません。
背景を説明させて頂きます。
私は今、複数の単語で既存のドキュメントに対して検索し、マッチした物をすべて表示するシステムを作っています。また、検索単語の一部は優先的に表示したいです。
そのためスコアーを上げて優劣をつける方法を考えました。
そこで調べると、boostingを使うと一方のクエリの検索結果に対してスコアーを上げそうでした。
そこで以下のようなクエリを書きました。
{
"query": {
"boosting": {
"positive": {
"term": {
"base_form": "リアル"
}
},
"negative": {
"term": {
"base_form": "了解"
}
},
"negative_boost": 0.5
}
}
}
しかしこの検索結果は"リアル"の分しか帰ってきませんでした。また反対にした場合"了解"の方の結果が帰ってくることは確認済です。
私のクエリは何が間違っているでしょうか?また私の目的を実現する方法としてboostingを使うことは間違っていないでしょうか?
----7/30追記----
以下に上記のQueryにexplainを付与し更にsizeを指定したQueryを貼らせて頂きます。
{
"from": 0,
"size": 50,
"explain": true,
"query": {
"boosting": {
"positive": {
"term": {
"base_form": "リアル"
}
},
"negative": {
"term": {
"base_form": "了解"
}
},
"negative_boost": 1
}
}
}
以下が結果です。全てを貼るとこのフォーラムの文字数制限に引っ掛かっているようなので、結果は1件分のみに省略しました。また省略した内容にはnegative分に指定した単語の結果は入っていませんでした。
また一部のパラメータは自分の事情でぼかしています。
{
"took": 3,
"timed_out": false,
"_shards": {
"total": 12,
"successful": 12,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 18,
"max_score": 9.85408,
"hits": [
{
"_shard": "[words][0]",
"_node": "jquFb9RIQpG9sbmLwA_b9A",
"_index": "words",
"_type": "word",
"_id": "15666",
"_score": 9.85408,
"_source": {
"base_form": "~~"
},
"_explanation": {
"value": 9.85408,
"description": "weight(base_form:リアル in 5665) [PerFieldSimilarity], result of:",
"details": [
{
"value": 9.85408,
"description": "score(doc=5665,freq=1.0 = termFreq=1.0 ), product of:",
"details": [
{
"value": 7.1245217,
"description": "idf, computed as log(1 + (docCount - docFreq + 0.5) / (docFreq + 0.5)) from:",
"details": [
{
"value": 18,
"description": "docFreq",
"details": []
},
{
"value": 22977,
"description": "docCount",
"details": []
}
]
},
{
"value": 1.3831216,
"description": "tfNorm, computed as (freq * (k1 + 1)) / (freq + k1 * (1 - b + b * fieldLength / avgFieldLength)) from:",
"details": [
{
"value": 1,
"description": "termFreq=1.0",
"details": []
},
{
"value": 1.2,
"description": "parameter k1",
"details": []
},
{
"value": 0.75,
"description": "parameter b",
"details": []
},
{
"value": 6.1939764,
"description": "avgFieldLength",
"details": []
},
{
"value": 2,
"description": "fieldLength",
"details": []
}
]
}
]
}
....
]
}
}
]
}
}