如果弹性搜索中的else语句

时间:2013-12-25 17:26:15

标签: php laravel elasticsearch

我们正在使用弹性搜索某些业务的数据。每个企业都有一个“位置”,并附有几个“标签”。我们有大约100个标签,标签1,标签2 ...标签100。 这是条件: businessA:location1:tag1,tag3,tag55,tag9 businessB:location2:tag14,tag36, businessC:location3:tag11,tag31,tag92,tag55 ...类似的业务N:location4:tag33,tag62,tag43,tag1 现在我从用户那里得到2个输入:1。“商业名称”或“标签”2.位置

现在有3个案例可以来:

  1. 用户在“位置1”中搜索“商家A” 期望的结果:业务A(因为它存在于位置1)将在结果上显示
  2. 用户在“位置N”中搜索“商家A” 期望的结果:虽然商业A不在位置N但仍然,由于用户的意图它应该排在首位,其次是位置N的其他业务
  3. 用户在“位置1”中搜索“代码3” 所有附有'tag3'且位于1位置的企业应该排在最前面,然后是附近地区的企业。
  4. 在为标签,商家和位置分配特定权重后,我们得到了荒谬的结果。如果我们试图给予最大值<商业名称的权重>&gt;标签&gt; location,我们能够满足语句1和2并且丢失语句3(由于名称中的字符串匹配)。但是,如果我们将重量改为标签&gt;名称&gt;我们得到1和3的位置但是没有2.我们可以使用任何算法来纠正所有三种情况吗?有什么方法可以使用'If-Else'声明而非弹性搜索或任何此类替代方法?

1 个答案:

答案 0 :(得分:0)

您可以使用多个查询搜索并一次进行2次搜索:1。找到确切的商家2.通过附近区域的标签查找相关商家并将结果合并到您的代码中