如何为ElasticSearch创建复杂的搜索查询?

时间:2017-10-24 11:58:18

标签: elasticsearch

我已经使用以下映射创建了ElasticSearch索引。 我需要编写复杂搜索查询,比如在查询结果上查找相关项。 Ex.Find项目的价格=" 100"。从搜索结果中获取ItemBrand,然后找到具有相同ItemBrand的其他项目。(类似产品)。 谁能帮我吗?

PUT myindex-solvisoft2
{
"mappings": {
"ItemCategory":{
"properties": {Category":{"type": "text"},"IsActive":{"type": "boolean"},"Comment":{"type": "text" }}
},

"ItemBrand": {
"properties": {"Creator": {"type": "keyword"},"DateEffective": {"type": "date"},"DateTerminated": {"type": "date"},"Description": {"type": "text"},
"IsActive": {"type": "boolean"},"ItemBrand": {"type": "keyword"}}
},

"Item": {
"properties": {
"Comment": {"type": "text"},"Creator": {"type": "keyword"},"DateEffective": {"type": "date"},
"DateTerminated": {"type": "date"},"IsActive": {"type": "boolean"},"ItemBrand": {"type": "keyword"   },
"ItemDescription": { "type": "text"  },"ItemCategory": {"type": "keyword"},"ItemId": {"type": "integer" },
"Price": {"type": "double"  }    }
}
}
}

2 个答案:

答案 0 :(得分:0)

编写查询而不运行它会非常具有挑战性,但我可以分解这些步骤。

使用boolean必须找出价格等于100的记录。

之后您需要过滤掉查询并使用字段搜索具有相同商品品牌的商品。

它并不复杂。

答案 1 :(得分:0)

以下是我对各个问题的解决方案。如果需要,不适合初学者。

GET myindex-solvisoft_similar_products/_search
{
"query": {
"bool": {
"filter": {
"term": {
"brand": "Microsoft"
}
}
}
},
"aggs": {
"colors": {
"terms": {
"field": "color"
}
},
"color_red": {
"filter": {
"term": {
"color": "red"
}
},
"aggs": {
"models": {
"terms": {
"field": "model"
}
}
}
}
},
"post_filter": {
"term": {
"color": "red"
}
}
}