我们有一个应用程序,您可以在其中关注“Ford Mustang”和“Fly Rod”等关键字。但是,当您关注关键字时,您可以为其分配范围距离。例如,您可能愿意为“1969 Ford Mustang”行驶 500 英里,但您可能只愿意为“Fly Rod”行驶 20 英里。
我试图找出最好的查询类型以及它的结构,以便我们可以说出以下内容。
1.) 取出所有后面的短语并从距离小于或等于最大距离的文档中拉回结果。
我可能会遵循这些短语。
短语:1969 年福特野马
距离:800 英里
短语:飞杆
距离:20 英里
短语:2015 F-150
距离:300 英里
我们正在尝试使用单个 ElasticSearch 查询来拉回所有结果。有没有人有一个如何做这样的事情的例子?我尝试使用 QueryString ,但这不允许您按距离过滤或进行任何类型的分页,两者都是必需的。
我也尝试了一个 multi_match ,但是这会对单词做 OR ,所以如果我关注“Fly Rod”,它会返回带有“Hot Rod”的文档,我们不希望这样。它似乎返回了它们,因为 multi_match 在查询关键字上使用了 OR。
这是在向全世界发布网站之前的最后一个主要障碍,但查看所有不同的查询类型,我看不出它是如何完成的。
如果有人有一个例子说明如何使用 ElasticSearch 完成这样的事情,我将不胜感激方向/反馈。我不害怕阅读文档或教程,我只是无法找到与这种情况相关的任何内容。
我们需要在查询中使用距离和短语。我个人可以看到此工作的唯一方法是对每个后续短语进行单个查询,但出于性能原因这是不可接受的。我可以轻松地跟踪 100-1000 个短语,即使 ES 非常快,许多查询也会花费太多的网络时间来提高性能。