【发布时间】:2015-12-06 14:02:37
【问题描述】:
我正在尝试使用 elasticsearch 构建一个全文搜索引擎。我们有一个应用程序,它在全球范围内举办会议。我们有未来和过去的会议数据。对于 POC,我们已经将会议详细信息加载到 elasticsearch 中,并且它包含像场馆的标题、日期、地点、geo_location 等字段作为文档。
我可以使用匹配所有查询进行简单搜索。而且通过使用function_score,我可以获得当前正在进行的会议,还可以使用用户地理位置,我可以获得用户位置附近的会议。
但在某些用例中,我被卡住了,无法继续。用例是。
1) 如果用户尝试使用“title + location”进行搜索,那么我不应该使用用户当前的地理位置,而是使用用户提供的 city_name 使用该地点的地理位置并检索这些文档。在这里,我知道还需要一些编程。
2) 用户使用“标题 + 年份”进行搜索,例如。 2014 年有氧运动。用户有兴趣查看 2014 年的所有心脏病学会议,它应该只检索那一年的文件。但是使用功能分数它正在检索当前年份的文档。
首先让我知道,以上两个用例可以在单个查询中处理。我正在考虑处理一个请求,但被卡住了。
【问题讨论】:
-
查看您当前的查询会有所帮助。但总的来说,我认为您的第一个问题需要修改查询以添加和删除用户地理位置的使用。
-
对于第二个问题,这可以通过在年份上添加一个过滤器来实现,保持查询的其余部分不变。这只会返回当年的文件。这个页面是一个很好的起点:elastic.co/guide/en/elasticsearch/reference/current/…
-
感谢 Ben 对此的回复。我正在使用的查询 {"query":{"function_score":{"query":{"match":{"_all":{"query":"cardio"}}},"functions":[{" gauss":{"geo_location":{"origin":{"lat":40.7127,"lon":-74.0059},"scale":"100km","offset":"0km","decay":0.9} }},{"gauss":{"startdate":{"origin":"now","scale":"30d","offset":"0d","decay":0.03}},"weight": 0.5}],"filter":{"exists":{"field":["geo_location"]}}}}}
-
您能否详细说明第一个问题。对如何使用查询删除和添加地理位置有点困惑
标签: elasticsearch