Например, скажем, у меня есть простая модель с CharField
.Я добавляю это к Page.search_fields
с boost
из 200, как описано в документах :
class TestModel(Page):
cool_name = models.CharField(max_length=50)
search_fields = Page.search_fields + [
index.SearchField('cool_name', boost=200),
]
...
Когда я запускаю простой запрос для слова pascal
, используяВстроенная в Wagtail реализация ES6 ...
backend.search('pascal', Page)
... и просмотреть сгенерированный запрос и ответ от ES, он выглядит как bool
запрос, который не учитывает увеличенное значение поля (оценка слишком низкая):
...
"_id": "100",
"_index": "wagtail__wagtailcore_page",
"_node": "mK2TtTfNRj-Dhw7RV0U49A",
"_score": 8.437754,
"_shard": "[wagtail__wagtailcore_page][1]",
"_source": {
...
},
...
Когда я запускаю простой запрос для pascal
непосредственно к ES API:
http://localhost:9200/wagtail__wagtailcore_page/_search?pretty=true&q=pascal&explain=true
я получаю следующее:
"total" : 1,
"max_score" : 262.495,
"hits" : [
{
"_index" : "wagtail__wagtailcore_page",
"_type" : "doc",
"_id" : "100",
"_score" : 262.495,
"_source" : {
....
},
"_explanation" : {
"value" : 262.495,
"description" : "max of:",
"details" : [
{
"value" : 262.495,
"description" : "weight(test_testmodel__cool_name:pascal in 60) [PerFieldSimilarity], result of:",
"details" : [
{
"value" : 262.495,
"description" : "score(doc=60,freq=1.0 = termFreq=1.0\n), product of:",
"details" : [
{
"value" : 200.0,
"description" : "boost",
"details" : [ ]
},
]
}
....
Таким образом, значение повышения корректно применяется к запросу term
, но не при использовании встроенной функциональности ES6.Это ожидаемое поведение трясогузки?Я понимаю, что это может быть связано с обработкой Elasticsearch полей boost
в запросах bool
, но документация подразумевает, что простое добавление boost
к SearchField
будет работать как положено.