2

私はSolrのバックグラウンドを持っており、Elasticsearchで「タグ付け」と「除外」に相当するものを見つけようとしています。

次の例では、ファセットpriceの計算からフィルターを除外するにはどうすればよいですか?pricesつまり、pricesファセットは、を除くすべてのフィルターを考慮に入れる必要がありますprice

{
  query : {
    "filtered" : {
      "query" : {
        "match_all" : {}
      },
      "filter" : {
        "and" : [
          {
            "term" : {
              "colour" : "Red"
            }
          },
          {
            "term" : {
              "feature" : "Square"
            }
          },
          {
            "term" : {
              "feature" : "Shiny"
            }
          },
          {
            "range" : {
              "price" : { 
                "from" : "10",
                "to" : "20"
              }
            }
          }
        ]
      }
    }
  },
  "facets" : {
    "colours" : {
      "terms" : {
        "field" : "colour"
      }
    },
    "features" : {
      "terms" : {
        "field" : "feature"
      }
    },
    "prices" : {
      "statistical" : {
        "field" : "price"
      }
    }
  }
}
4

2 に答える 2

5

クエリにトップレベルのフィルターとして価格フィルターを適用し、それをすべてのファセットに追加して、facet_filterとして価格を期待することができます。

{
  query : {
    "filtered" : {
      "query" : {
        "match_all" : {}
      },
      "filter" : {
        "and" : [
          {
            "term" : {
              "colour" : "Red"
            }
          },
          {
            "term" : {
              "feature" : "Square"
            }
          },
          {
            "term" : {
              "feature" : "Shiny"
            }
          }
        ]
      }
    }
  },
  "facets" : {
    "colours" : {
      "terms" : {
        "field" : "colour"
      },
      "facet_filter" : {
        "range" : { "price" : {  "from" : "10", "to" : "20" } }
      }
    },
    "features" : {
      "terms" : {
        "field" : "feature"
      },
      "facet_filter" : {
        "range" : { "price" : {  "from" : "10", "to" : "20" } }
      }
    },
    "prices" : {
      "statistical" : {
        "field" : "price"
      }
    }
  },
  "filter": {
    "range" : { "price" : {  "from" : "10", "to" : "20" } }
  }
}
于 2013-03-27T00:02:22.387 に答える
0

ところで、ES1.0.0以降の重要な変更。トップレベルフィルターの名前がpost_filterに変更されました(http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/_search_requests.html#_search_requests)。そして、ここで説明されているように、を使用してフィルタリングされたクエリが引き続き優先されます: http: //elasticsearch-users.115913.n3.nabble.com/Filters-vs-Queries-td3219558.html

またglobal、ファセットにはクエリフィルターによるフィルタリングを回避するオプションがあります(elasticsearch.org/guide/en/elasticsearch/reference/current/search-facets.html#_scope)。

于 2014-06-04T03:22:04.037 に答える