Как создать функцию Decay в ElasticSearch DSL python

#python #elasticsearch

#python #elasticsearch

Вопрос:

Я запрашиваю эластичный поиск с помощью elasticsearch-dsl / 2.0.0

  "linear": {
        "date": {
              "origin": "now", 
              "scale": "10d",
              "offset": "5d", 
              "decay" : 0.5 
        }
    }
  

https://www.elastic.co/guide/en/elasticsearch/reference/2.4/query-dsl-function-score-query.html#function-decay

Как построить запрос линейной функции с помощью elasticsearch-dsl

Ответ №1:

Попробуйте выполнить следующий запрос

 from elasticsearch import Elasticsearch
from elasticsearch_dsl import Search, query

client = Elasticsearch()

s = Search(using=client)

function_score_query = query.Q(
        'function_score',
        query=query.Q('match', your_field='your_query'),
        functions=[
            query.SF('linear',date={"origin":"now","scale":"10d",
                                    "offset":"5d", "decay":0.5})
        ]
    )
  

Если вы напечатаете function_score_query.to_dict() , вы получите

 {
    'function_score': {
        'query': {
            'match': {
                'your_field': 'your_query'
            }
        },
        'functions': [{
            'linear': {
                'date': {
                    'origin': 'now',
                    'decay': 0.5,
                    'scale': '10d',
                    'offset': '5d'
                }
            }
        }]
    }
}
  

Вы можете проверить тестовые примеры на github, чтобы увидеть, как функция score query может использоваться в DSL