#python #elasticsearch
#python #elasticsearch
Вопрос:
допустим, у меня есть индекс документа с полем dense_vector, например:
"mappings": {
"_meta": {
"imagedir": imgdir
},
"properties": {
"imageid": {
"type": "text"
},
"densevec: {
"type": "dense_vector",
"dims": dim
}
}
Возможно ли в запросе скрипта получить доступ к отдельным значениям типа dense_vector? Например, как индексировать массив?
"script": {
"lang":"painless",
"source": """
def a = doc['densevec'][0];
def b = doc['densevec'][1];
return a b;
""",
}
Возможно ли также определить новый dense_vector внутри запроса скрипта?
Нравится:
"script": {
"lang":"painless",
"source": """
dense_vector d = new dense_vector(...);
""",
}
Приветствую,
Кристиан
Ответ №1:
Это еще не поддерживается в ES, но на github продолжается обсуждение возможности безболезненного отображения плотных векторов.
Что касается создания новых векторов в скрипте — вы все равно можете использовать тривиальный массив чисел. Например dotProduct
, функция принимает оба dense_vectors
и массивы в качестве входных данных:
"script": {
"source": """
double value = dotProduct(params.query_vector, 'my_dense_vector');
return sigmoid(1, Math.E, -value);
""",
"params": {
"query_vector": [4, 3.4, -0.2]
}
}
Доступные в настоящее время (11/2020) векторные функции перечислены здесь.