在 flex 搜索中,我们有两个字段:街道编号1和街道编号2。我们在Elastic Search中还有一个Address字段,而Address是2个字段与其他一些字段的组合。因此,我们的地址为:
如果用户使用1610进行搜索,则应同时返回该地址。
有关如何形成查询的任何帮助?
最佳答案
想法是利用 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
}
}
}
}
关于elasticsearch - Elasticsearch 街道范围搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48716910/