【问题标题】:Elasticsearch with multiple search criteria具有多个搜索条件的 Elasticsearch
【发布时间】: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


【解决方案1】:

一个合适的解决方案需要你在你的应用程序中编写自己的查询解析器(在 elasticsearch 之外),它将解析查询并提取日期、位置等。一旦提取了所有特征,解析器应该生成一个 bool查询每个功能将成为适当的must 子句的位置。因此,日期将变为范围查询,位置 - geo_location 查询和其他所有内容将进入 match 查询以进行全文匹配。然后这个查询可以发送到elasticsearch。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-30
    • 2016-08-15
    • 2011-03-21
    • 2014-12-03
    • 2015-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多