1

変更しようとしている Elasticsearch クエリを継承しました。現時点でのクエリは次のとおりです。

{
  "fields": [

  ],
  "from": 0,
  "size": 51,
  "query": {
    "filtered": {
      "query": {
        "query_string": {
          "fields": [
            "data.*"
          ],
          "default_operator": "AND",
          "query": "*Search term*"
        }
      },
      "filter": [
        {
          "terms": {
            "type": [
              "typeOne",
              "typeTwo",
              "typeThree"
            ]
          }
        }
      ]
    }
  }
}

今、私がやろうとしているのは、結果でこれらの用語の1つを他の2つよりもブーストすることですが、それを機能させることができませんでした. 「ブースト」値を追加しようとしましたが、これは奇妙なことに逆の効果をもたらしました-ブーストが与えられたタイプを無効にします。

「フィルター」オブジェクトとして次のことを試しました。

"filter": [
        {
          "bool": {
            "should": [
              {
                "term": {
                  "type": "typeOne"
                }
              },
              {
                "term": {
                  "type": "typeTwo"
                }
              },
              {
                "term": {
                  "type": "typeThree",
                  "boost": 2
                }
              }
            ]
          }
        }
      ]

しかし、前に述べたように、「typeThree」をブーストする代わりに、結果からすべての「typeThree」を削除します。

特定の用語タイプを後押ししてくれる人はいますか?

4

2 に答える 2

1

keety の答えは 98% でしたが、すべてをまとめるには少し余分なグーグル検索が必要でした。問題は、"weight" がここでは機能せず、代わりに "boost_factor" を使用する必要があることです。最終的なクエリは次のようになります。

{
    "fields": [

    ],
    "from": 0,
    "size": 51,
    "query": {
        "function_score": {
            "functions": [
                {
                    "filter": {
                        "term": {
                            "type": "typeOne"
                        }
                    },
                    "boost_factor": 1.2
                },
                {
                    "filter": {
                        "term": {
                            "type": "typeTwo"
                        }
                    },
                    "boost_factor": 1.1
                },
                {
                    "filter": {
                        "term": {
                            "type": "typeThree"
                        }
                    },
                    "boost_factor": 1
                }
            ],
            "score_mode": "sum",
            "boost_mode": "sum",
            "query": {
                "filtered": {
                    "query": {
                        "query_string": {
                            "fields": [
                                "data.*"
                            ],
                            "default_operator": "AND",
                            "query": "*search term*"
                        }
                    },
                    "filter": [
                        {
                            "terms": {
                                "type": [
                                    "typeOne",
                                    "typeTwo",
                                    "typeThree"
                                ]
                            }
                        }
                    ]
                }
            }
        }
    }
}
于 2015-08-04T07:38:39.137 に答える
1

上記を達成するためにクエリを構造化する方法は複数あります。1 つのアプローチは function_scoreを使用することです。

例:

"query": {
      "function_score": {
         "functions": [
            {
               "filter": {
                  "term": {
                     "type": "typeThree"
                  }
               },
               "weight": 2
            }
         ],
         "score_mode": "sum",
         "boost_mode": "sum",
         "query": {
            "filtered": {
               "query": {
                  "query_string": {
                     "fields": [
                        "data.*"
                     ],
                     "default_operator": "AND",
                     "query": "*search term*"
                  }
               },
               "filter": [
                  {
                     "terms": {
                        "type": [
                           "typeOne",
                           "typeTwo",
                           "typeThree"
                        ]
                     }
                  }
               ]
            }
         }
      }
   }

説明を有効にして、これがスコアリングにどのように影響するかを確認できます

于 2015-08-03T17:38:04.023 に答える