2016-03-04 52 views
0

我有一个文件,让说,它具有属性排序对不同性质

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

通常,当我搜索我想有标题 更高的分数,但如果我搜索一个作家我想获得更高的分数对作者财产。

Leta说我搜索地狱。

我得到(我想)

1. Inferno 
2. Fernando 
3. furnished. 

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

Danish meal 
DanSomething 
Dan.. 

我不能知道之前,我搜索,如果我搜索作者或标题。 你有什么想法我会如何实现这一点?

+0

你使用什么查询? – Richa

回答

0

实现此目的最简单的方法是通过提高author字段上的查询,以便如果存在作者匹配,它将出现在title字段的其他匹配下方。

举例来说,你可以尝试这样的:

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

在上面的查询,我们给的2升压匹配Dan Brown作为一个作家的结果。

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