отсортировать результатasticsearch так, чтобы результат с ключевым словом в начале отображался первым - PullRequest
0 голосов
/ 24 июня 2019

Я ищу слово "стад" и ожидаю результат в этом порядке

«род занятий»: «Студент (Betriebswirtschaft)»

«род занятий»: «Студент (Humanmedizin)»

«род занятий»: «Студент (Bauwesen)»

«род занятий»: «Студент (Chemie)»

«род занятий»: «Студент (Архитектур)»

"род занятий": "Oberstudienrat / Oberstudienrätin"

«род занятий»: «Nagelstudioinhaber»

Но я получаю результат в этой последовательности

«род занятий»: «Студент (Betriebswirtschaft)»

«род занятий»: «Студент (Humanmedizin)»

"занятие": "Oberstudienrat / Oberstudienrätin"

«род занятий»: «Студент (Bauwesen)»

«род занятий»: «Студент (Chemie)»

«род занятий»: «Nagelstudioinhaber»

«род занятий»: «Студент (Архитектор)»

как эти слова "Oberstudienrat / Oberstudienrätin", "Nagelstudioinhaber" должны быть в конце, потому что я сначала хочу увидеть результаты, которые имеют "Stud" в начале, а затем слова, которые имеют "Stud" в середине

{  
  "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 голосов
/ 25 июня 2019

Здесь, если ваше поле имеет токены, вам трудно выполнить сортировку по тому же полю.

Измените поле для достижения сортировки.Это поле должно иметь тип raw или применять только ключевое слово tokenizer и tokenizer в нижнем регистре.Необработанное поле не будет проанализировано, то есть оно будет одним термином, поэтому его можно использовать для сортировки.Для этого вам необходимо обновить отображение, а затем использовать api reindex для обновления ваших данных.

Ваше поле будет отображаться как

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

И использоватьновое поле для сортировки.

GET my_index/_search

    {
      "query": {
        "match": {
          "city": "york" 
        }
      },
      "sort": {
        "city.raw": "asc" 
      }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...