使用聚合作为过滤器ElasticSearch

时间:2015-12-09 15:22:53

标签: elasticsearch filter aggregation

ElasticSearch版本1.7.2

我使用聚合作为产品过滤器。

例如,在前端,用户选择一个产品组,然后查询将过滤所有产品仅用于选择产品组(groep in Dutch)。

我还希望能够按文字搜索并匹配产品组。一个产品组我看起来像这样:

  

Componenten | Processoren |英特尔| Socket 1155 | S1155 - Core i3

我想我不能在一个单独的领域做到这一点,因为它要么分析整个信号,要么分割信号,否则它将单独使用全文。

所以我创建了两个字段来保存相同的信息,但使用不同的索引属性:

这是我在索引中使用的映射:

{


"settings":{
      "index":{
         "analysis":{
            "filter":{
               "synonym":{
                  "type":"synonym",
                  "synonyms_path":"synonyms.txt",
                  "stopwords":"_dutch_"
               }
            },
            "analyzer":{
               "synonym":{
                  "tokenizer":"standard",
                  "filter":[
                     "synonym",
                     "lowercase"
                  ]
               }
            }
         }
      }
   },
   "mappings":{
      "products":{
         "properties":{
            "product_id":{
               "type":"string"
            },
            "naam":{
               "type":"string",
               "index":"analyzed",
               "analyzer":"synonym"
            },
            "merk":{
               "type":"string",
               "index":"not_analyzed",
               "analyzer":"synonym"
            },
            "lijn":{
               "type":"string",
               "index":"not_analyzed",
               "analyzer":"synonym"
            },
            "sku":{
               "type":"string",
               "index":"not_analyzed"
            },
            "omschrijving":{
               "type":"string",
               "boost":"0.5",
               "analyzer":"synonym"
            },
            "groep":{
               "type":"string",
               "index":"not_analyzed"
            },
            "groep_termen":{
               "type":"string",
               "index":"analyzed"
            },
            "ean":{
               "type":"string",
               "boost":"2.0",
               "index":"not_analyzed"
            },
            "kenmerken_json":{
               "type":"nested",
               "index":"analyzed",
               "dynamic":true
            },
            "kenmerken":{
               "type":"string",
               "analyzer":"synonym"
            },
            "levertijd":{
               "type":"integer"
            },
            "prijs":{
               "type":"integer"
            },
            "levertijd_min":{
               "type":"string",
               "index":"not_analyzed"
            },
            "levertijd_max":{
               "type":"string",
               "index":"not_analyzed"
            },
            "product_url":{
               "type":"string",
               "index":"not_analyzed"
            },
            "eol":{
               "type":"boolean"
            }
         }
      }
   }
}

如何在groep上搜索并聚合然后在groep上过滤?

1 个答案:

答案 0 :(得分:0)

我认为您需要的是多字段类型。

You can read about this here

稍后您可以根据需要查询和聚合多字段。