建议在索引中跨多个类型完成

时间:2014-02-05 02:52:18

标签: elasticsearch

是否可以对类型进行建议完成?我能够在索引上做到这一点。

POST /data/_suggest
{
  "data" : {
    "text" : "tr",
    "completion" : {
      "field" : "sattributes",
      "size":50
    }
  }
}

当我选择某种类型时:

POST /data/suggestion/_suggest
{
  "data" : {
    "text" : "tr",
    "completion" : {
      "field" : "sattributes",
      "size":50
    }
  }
}

suggestion 是类型。

我没有得到任何结果。我需要对两种不同类型的文章和书籍做一些建议。我是否需要创建单独的索引才能使它们正常工作,或者在弹性搜索中是否有办法实现此目的?如果我必须搜索我的索引data,则可以获得类型article的50个结果和book类型的50个结果。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

Lucene没有类型概念,因此在Elasticsearch中,它们只是作为一个名为_type的隐藏字段实现。当您搜索特定类型时,Elasticsearch会在该字段上添加过滤器。

完成建议器根本不使用传统搜索,这意味着它无法在_type字段上应用过滤器。所以你有几个选择:

  1. 每种类型使用不同的完成建议字段,例如suggestion_sattributesothertype_sattributes

  2. 使用_type作为前缀对您的数据进行索引,例如type1 actual words to suggest,然后当您提出建议时,在查询前加上type1

  3. 使用单独的索引

  4. 事实上,上面的选项(2)目前正作为新的ContextSuggester实施,这将允许您自动执行此操作(及更多)。