1

ドキュメントに記載されているように、次のことを実行しようとしています(これは現在では古くなっている可能性があります)。

https://www.elastic.co/guide/en/elasticsearch/guide/current/mapping.html

そこで説明されているシナリオを、私が達成したいことに適応させます。

トピック 1 に関するブログ投稿用の blog_t1 と、トピック 2 に関するブログ投稿用の blog_t2 の 2 つのタイプがインデックスにあるとします。どちらのタイプにもタイトル フィールドがあります。

次に、blog_t1 のタイトル フィールドのみにクエリ ブースティングを適用します。

以前のバージョンの Elasticsearch では、blog_t1.title と blog_t2.title を使用して、タイプからフィールドを参照できました。そのため、そのうちの 1 つをブーストするのは、blog_t1.title^2 と同じくらい簡単でした。

しかし、Elasticsearch 2.x 以降、タイプの古いサポートの一部が削除されました (あいまいさを取り除くなどの正当な理由により)。これらの変更については、ここで説明します。

https://www.elastic.co/guide/en/elasticsearch/reference/current/breaking_20_mapping_changes.html

だから私の質問は、multi_match クエリで、Elasticsearch 2.x を使用して、blog_t2 ではなくタイプ blog_t1 に対してのみ、タイトルに対してそのブーストを行うにはどうすればよいですか?

クエリは次のようになりますが、type.fieldはもはや問題ではないため、これは明らかに機能しません。

GET /my_index/_search
{
  "query": {
    "multi_match": {
      "query": "Hello World",
      "fields": [
        "blog_t1.title^2",
        "blog_*.title",
        "author",
        "content"
      ]
    }
  }
} 

参考までに、私がこれまでに見つけた唯一の解決策は、タイトルに別の名前を付けることです。たとえば、blog_t1 には title_boosted を、他のものには単にタイトルを付けます。これは、「タイトル」をユニークなこと。

ありがとう。

4

1 に答える 1

0

ドキュメントタイプに別の「オプション」の制約を追加して、それに一致するドキュメントのスコアが高くなるようにするにはどうすればよいですか (ブーストで調整できます)。

{
  "query" : {
    "bool" : 
    {
      "must" : 
      [
        {"match" : {"title" : "Hello world"}}
      ],
      "should" : 
      [
        {"match" : {"_type" : "blog_t1"}}
      ]
    }
  }
}

またはスコア関数を使用する場合:

{
  "query": {
    "function_score": {
      "query": {
        "match": {
          "title": "Hello world"
        }
      },
      "boost_mode": "multiply",
      "functions": [
        {
          "filter": {
            "term": {
              "_type": "blog_t1"
            }
          },
          "weight": 2
        },
        {
          "filter": {
            "term": {
              "_type": "blog_t2"
            }
          },
          "weight": 3
        }
      ]
    }
  }
}
于 2016-02-29T12:54:26.643 に答える