对elasticsearch结果进行排序,以便以关键字开头的结果首先出现

时间:2019-06-24 09:30:49

标签: elasticsearch

我正在搜索单词“ stud”,并且期望结果按此顺序

“职业”:“学生(Betriebswirtschaft)”

“职业”:“学生(人类医学)”

“职业”:“学生(鲍威森)”

“职业”:“学生(化学)”

“职业”:“学生(Architektur)”

“职业”:“ Oberstudienrat /Oberstudienrätin”

“职业”:“ Nagelstudioinhaber”

但我按此顺序得到了结果

“职业”:“学生(Betriebswirtschaft)”

“职业”:“学生(人类医学)”

“职业”:“ Oberstudienrat /Oberstudienrätin”

“职业”:“学生(鲍威森)”

“职业”:“学生(化学)”

“职业”:“ Nagelstudioinhaber”

“职业”:“学生(Architektur)”

像这些单词“ Oberstudienrat /Oberstudienrätin”一样,“ Nagelstudioinhaber”应该在结尾处,因为我首先想看到开头带有“ stud”的结果,然后是中间带有“ stud”的单词< / p>

{  
  "query":{  
  "bool":{  
     "must":[  
        {  
           "query_string":{  
              "query":"*Stud*",
              "fields":[  
                 "occupation"
              ]
           }
        }
     ]
  }
},
"rescore":{  
  "window_size":500,
  "query":{  
     "score_mode":"multiply",
     "rescore_query":{  
        "bool":{  
           "should":[  

              {  
                 "match":{  
                    "occupation":{  
                       "query":"Stud*",
                       "boost":3
                    }
                 }
              }
           ]
        }
     },
     "query_weight":2.7,
     "rescore_query_weight":3.2
  }

} }

1 个答案:

答案 0 :(得分:0)

如果您的字段被标记,那么您很难在同一字段上进行排序。

修改字段以实现排序。此字段应为原始类型,或仅对其应用关键字标记符和小写标记符。原始字段将不会被分析,这意味着总共将是一个术语,因此可以用于排序。为此,您必须更新映射,然后使用reindex api来更新数据。

您的字段将具有类似于

的映射
PUT my_index
    {
      "mappings": {
        "properties": {
          "city": {
            "type": "text",
            "fields": {
              "raw": { 
                "type":  "keyword"
              }
            }
          }
        }
      }
    }

并使用新字段进行排序。

GET my_index/_search

    {
      "query": {
        "match": {
          "city": "york" 
        }
      },
      "sort": {
        "city.raw": "asc" 
      }
    }