8

現在私を混乱させているのは、クエリでcategory_id他のブーストよりもはるかに高い10のブーストを追加することです。別のカテゴリーのアイテム「太極拳」は、どういうわけか結果の一番上に到着します。

私は次のマッピングを持っています:

{
  "the_items": {
    "item": {
      "properties": {
        "brand_id": {
          "type": "integer"
        },
        "category_id": {
          "type": "integer"
        },
        "description": {
          "type": "multi_field",
          "fields": {
            "description": {
              "type": "string",
              "analyzer": "full_title"
            }
          }
        },
        "title": {
          "type": "multi_field",
          "fields": {
            "title": {
              "type": "string",
              "analyzer": "full_title"
            },
            "partial_title": {
              "type": "string",
              "index_analyzer": "partial_title",
              "search_analyzer": "full_title",
              "include_in_all": false
            }
          }
        },
        "updated_at": {
          "type": "string"
        }
      }
    }
  }
}

私は次のクエリを実行しています:

curl -XGET 'http://localhost:9200/austin_items/_search?pretty=true' -d '{
  "query": {
    "filtered": {
      "query": {
        "bool": {
          "should": [
            {
              "match": {
                "title": {
                  "boost": 2,
                  "query": "chi",
                  "type": "phrase"
                }
              }
            },
            {
              "match": {
                "title.partial_title": {
                  "boost": 1,
                  "query": "chic"
                }
              }
            },
            {
              "match": {
                "description": {
                  "boost": 0.2,
                  "query": "chic"
                }
              }
            },
            {
              "term": {
                "category_id": {
                  "boost": 10,
                  "value": 496
                }
              }
            }
          ]
        }
      }
    }
  }
}'

それは私に次のヒットを与えます:

[
  {
    "_index": "the_items",
    "_type": "item",
    "_id": "34410",
    "_score": 0.7510745,
    "_source": {
      "id": "34410",
      "title": "Initiez-vous au Tai Chi",
      "description": "p. Le Tai Chi est un art chevaleresque, initialement originaire de Chine, maintenant partie int\u00e9grante des tr\u00e9sors du patrimoine de l'humanit\u00e9. C'est un art de droiture, un art pour les braves, \u00e0 la recherche du geste juste et de l'attitude juste - la \"ju",
      "brand_id": "0",
      "category_id": "497"
    }
  },
  {
    "_index": "the_items",
    "_type": "item",
    "_id": "45393",
    "_score": 0.45193857,
    "_source": {
      "id": "45393",
      "title": "Very Hot Chicken",
      "description": "Laissez-vous tenter par la force du Very Hot Chicken Burger, avec sa sauce piment\u00e9e, ses rondelles de piment vert et sa pr\u00e9paration pan\u00e9e au poulet.\r\nAjoutez-y une tranche de chester fondu, de la salade, des tomates, le tout dans un pain parsem\u00e9 de bl\u00e9 concass\u00e9 pour un burger fort en go\u00fbt !",
      "brand_id": "0",
      "category_id": "496"
    }
  }
]

フィールドを30のようなばかげたものにブーストすると、category_id「太極拳」が上位の結果から外れます。他に何もない場合に備えて、実際には「Thai Chi」を検索結果に表示したいのですが、何らかの理由でクエリのcategory_id部分が正しく機能していないようです。なぜこれが起こっているのか誰かが知っていますか?

4

1 に答える 1

9

クエリに追加したブーストに基づいてスコアを変更しようとしていました。ただし、スコアにはブーストだけでなく、さまざまなことが考慮されます。カテゴリとブランドのブーストを強制するために、「custom_boost_factor」を使用し、それを通常のケースに追加されたサブクエリとして適用することになりました。

curl -XGET 'http://localhost:9200/austin_items/_search?pretty=true' -d '
{
  "query" : {
    "filtered" : {
      "query" : {
        "bool" : {
          "should" : [
            { "match" : { "title" : { "boost" : 2,"query" : "chi", "type":"phrase"} } },
            { "match" : { "title.partial_title" : { "boost" : 1,"query" : "chi"} } },
            { "match" : { "description" : { "boost" : 0.2,"query" : "chic"} } },
            { "custom_boost_factor": { 
                "query":{
                  "bool": {
                    "must" : [
                      { "multi_match": { "query" : "chi", "fields" : ["title", "description"] }},
                      { "in": { "category_id": [496] } }
                    ]
                  }
                },
                "boost_factor": 2 
              }
            },
            { "custom_boost_factor": { 
                "query":{
                  "bool": {
                    "must" : [
                      { "multi_match": { "query" : "chi", "fields" : ["title", "description"] }},
                      { "in": { "brand_id": [999] } }
                    ]
                  }
                },
                "boost_factor": 3
              }
            }
          ]
        }
      }
    }
  }
}'
于 2013-03-05T14:13:01.910 に答える