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上过滤?