ElasticSearch-按自由文本搜索,按数字排序,所有内容都在一个半径内

yi0zb3m4  于 2023-06-21  发布在  ElasticSearch
关注(0)|答案(1)|浏览(110)

尝试通过查询字符串在索引中搜索,通过数值字段在特定半径内排序。
Elastic文档中没有参考,所以我可能必须在应用程序级别而不是数据库级别解决它。但在发明轮子之前,我想确保我读对了。
假设以下文档结构(Map):

* Title: String
* Description: String
* Rating: Numeric.
* Location: { Lat, Long}

我想用以下约束查询此文档:

  • 方圆20公里内
  • 按标题和描述搜索(fuzzi)。
  • 结果应按评级排序。
  • 如果结果小于X(假设为100),则执行相同操作,但将半径增加到50km。

如果上面的内容在数据库级别上不可行,我将在应用程序级别上实现。但是,为了做到这一点,我仍然需要能够查询1(即在特定半径内搜索X文本并按评级排序)。
总结如下:

1. Can I do the entire process in Elastic? If so, how?
2. Assuming I can't (which I suspect this is the situation), how can I query the above item 1 ?

Thanks:)

voj3qocg

voj3qocg1#

您可以从测试geo queries开始。在下面的例子中,我使用了地理距离。
问题1 -半径20公里内

{
  "query": {
    "bool": {
      "must": [
        {
          "multi_match": {
            "query": "",
            "fuzziness": "AUTO",
            "fields": [
              "Title",
              "Description"
            ]
          }
        }
      ],
      "filter": {
        "geo_distance": {
          "distance": "20km",
          "pin.location": {
            "lat": 40,
            "lon": -70
          }
        }
      }
    }
  },
  "sort": [
    {
      "Rating": {
        "order": "desc"
      }
    }
  ]
}

问题二:
使用新距离执行新查询。

相关问题