按不同的属性排序

时间:2016-03-04 16:41:43

标签: elasticsearch

我有一份文件,假设它有属性

 "title": {
    "type": "string"
  },
  "author": {
    "type": "string"
  }

通常情况下,当我搜索时,我希望在标题上获得更高的分数 但是,如果我搜索作者,我想在作者属性上获得更高的分数。

Leta说我搜索Inferno。

我得到(我想要的)

 1. Inferno
 2. Fernando
 3. furnished.

但现在我进入丹·布朗 我想得到相同的结果,而不是

Danish meal
DanSomething
Dan..

我在搜索之前无法知道我是在搜索作者还是标题。 你有什么想法我会如何实现这个?

1 个答案:

答案 0 :(得分:0)

实现此目标的最简单方法是在author字段上提升查询,这样如果有作者匹配,则会显示在title字段的其他匹配项下方。

例如,您可以尝试这样:

{
  "query": {
    "bool": {
      "should": [
        {
          "query_string": {
            "query": "Dan Brown",
            "fields": [
              "title"
            ]
          }
        },
        {
          "query_string": {
            "query": "Dan Brown",
            "boost": 2,
            "fields": [
              "author"
            ]
          }
        }
      ]
    }
  }
}

在上面的查询中,我们将Dan Brown作为作者的结果提高了2倍。

请注意,这只是给你一个引导程序,它绝对不是故事的结尾。为了获得完美的结果,可能需要创建一个或多个自定义分析器,以便正确索引您需要搜索的标记。但这应该让你前进。