在elasticsearch中,我们有两个字段:街道编号1和街道编号2。我们在Elastic Search中还有一个Address字段,而Address是2个字段与其他一些字段的组合。因此,我们的地址为:
如果用户使用1610搜索,则应同时返回该地址。
有关如何形成查询的任何帮助?
想法是利用range数据类型并将最小和最大街道号存储在该字段中。
range
在映射中,您将具有以下内容:
PUT property_index { "mappings": { "_doc": { "properties": { "street_number_range": { "type": "integer_range" }, "street_name": { "type": "text" } } } } }
然后,您可以像这样添加两个文档:
PUT property_index/_doc/1 { "street_number_range" : { "gte" : 1604, "lte" : 1612 }, "street_name": "Calver Building" } PUT property_index/_doc/2 { "street_number_range" : { "gte" : 1608, "lte" : 1645 }, "street_name": "Park House" }
最后,您的查询将如下所示,并且将返回两个文档
GET property_index/_search { "query" : { "term" : { "street_number_range" : { "value": 1610 } } } }
更新
您还可以使用以下查询搜索范围:
GET property_index/_search { "query" : { "range" : { "street_number_range" : { "gte": 1600, "lte": 1650 } } } }