我们有两个街道号码1&弹性搜索中的街道2号。我们在弹性搜索中也有一个地址字段,地址是两个字段和其他一些字段的组合。所以我们有一个地址:
如果用户正在搜索1610,则应返回该地址。
有关如何形成查询的任何帮助?
答案 0 :(得分:2)
我们的想法是利用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
}
}
}
}