分面中的弹性搜索过滤

时间:2013-11-13 07:35:01

标签: search elasticsearch analytics

我想在弹性搜索中模拟父子关系,并对其执行一些分析工作。我的用例是这样的

我有这样的店主

"_source": {
               "shopId": 5,
               "distributorId": 4,
               "stateId": 1,
               "partnerId": 2,
            }

现在有这样的子记录(每天):

"_source": {
                   "shopId": 5,
                   "date" : 2013-11-13,
                   "transactions": 150,
                   "amount": 1980,
                }

父项是每个商店的记录,而子项是每个商店所做的交易 天。现在我想做一些像

这样的复杂查询

查看经销商为5的最近30天内每天的总交易

POST /newdb/shopsDaily/_search
{
   "query": {
      "match_all": {}
   },
   "filter": {
      "has_parent": {
         "type": "shop",
         "query": {
            "match": {
               "distributorId": "5"
            }
         }
      }
   },
   "facets": {
      "date": {
         "histogram": {
            "key_field": "date",
            "value_field": "transactions",
            "interval": 100
         }
      }
   }
}

但是我得到的结果并没有考虑我应用的过滤。

所以我将查询更改为:

POST /newdb/shopDaily/_search
{

      "query": {"filtered": {
         "query": {"match_all": {}},
         "filter": { "has_parent": {
            "type": "shop",
            "query": {"match": {
               "distributorId": "13"
            }}
         }}
      }}, 
      "facets": {
         "date": {
            "histogram": {
               "key_field": "date",
               "value_field": "transactions", 
               "interval": 100
            }
         }

      }
}

然后最终的直方图方面过滤到计数。

所以,当我浏览时,虽然我发现这是由于使用filtered(只能在查询子句中使用,而不是在filter之外),而不是filter, 但它也提到要快速搜索,你应该使用filter。我会在第二步(当我使用filtered而不是filter时)进行搜索会影响弹性搜索的效果吗?如果是这样,我怎样才能使我的方面尊重过滤器而不影响性能?

谢谢你的时间

1 个答案:

答案 0 :(得分:0)

过滤查询中的

过滤器(查询子句中的过滤器)被缓存,因此更快。这些类型的过滤器会影响搜索结果和构面计数。    在构面计算期间不考虑查询子句之外的过滤器。它们仅被视为搜索结果。 Facet仅根据query子句计算。如果您想要过滤方面,则需要为每个方面子句设置过滤器。