Возможен доступ к значениям dense_vector в elasticsearch?

#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) векторные функции перечислены здесь.