Увеличение SearchFields не влияет на реализацию Elasticsearch 6 Wagtail - PullRequest
0 голосов
/ 03 июля 2019

Например, скажем, у меня есть простая модель с 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 будет работать как положено.

...