Skip to content

Elasticsearch

ElasticsearchEmbedding #

Bases: BaseEmbedding

Elasticsearch嵌入模型。

该类提供了一个接口,用于使用部署在Elasticsearch集群中的模型生成嵌入。它需要一个Elasticsearch连接对象和集群中部署的模型的model_id。

在Elasticsearch中,您需要加载和部署一个嵌入模型。 - https://www.elastic.co /guide/en/elasticsearch/reference/current/infer-trained-model.html - https://www.elastic.co /guide/en/machine-learning/current/ml-nlp-deploy-models.html

Source code in llama_index/embeddings/elasticsearch/base.py
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
class ElasticsearchEmbedding(BaseEmbedding):
    """Elasticsearch嵌入模型。

    该类提供了一个接口,用于使用部署在Elasticsearch集群中的模型生成嵌入。它需要一个Elasticsearch连接对象和集群中部署的模型的model_id。

    在Elasticsearch中,您需要加载和部署一个嵌入模型。
    - https://www.elastic.co
        /guide/en/elasticsearch/reference/current/infer-trained-model.html
    - https://www.elastic.co
        /guide/en/machine-learning/current/ml-nlp-deploy-models.html"""  #

    _client: Any = PrivateAttr()
    model_id: str
    input_field: str

    def class_name(self) -> str:
        return "ElasticsearchEmbedding"

    def __init__(
        self,
        client: Any,
        model_id: str,
        input_field: str = "text_field",
        **kwargs: Any,
    ):
        self._client = client
        super().__init__(model_id=model_id, input_field=input_field, **kwargs)

    @classmethod
    def from_es_connection(
        cls,
        model_id: str,
        es_connection: Any,
        input_field: str = "text_field",
    ) -> BaseEmbedding:
        """从现有的Elasticsearch连接实例化嵌入。

该方法提供了一种使用现有的Elasticsearch连接创建ElasticsearchEmbedding类实例的方式。连接对象用于创建MlClient,然后用于初始化ElasticsearchEmbedding实例。

Args:
model_id (str): 部署在Elasticsearch集群中的模型的model_id。
es_connection (elasticsearch.Elasticsearch): 现有的Elasticsearch连接对象。
input_field (str, 可选): 文档中输入文本字段的键的名称。默认为'text_field'。

Returns:
ElasticsearchEmbedding: ElasticsearchEmbedding类的实例。

示例:
    .. code-block:: python

        from elasticsearch import Elasticsearch

        from llama_index.embeddings.elasticsearch import ElasticsearchEmbedding

        # 定义模型ID和输入字段名称(如果与默认值不同)
        model_id = "your_model_id"
        # 可选,仅当与'text_field'不同时使用
        input_field = "your_input_field"

        # 创建Elasticsearch连接
        es_connection = Elasticsearch(hosts=["localhost:9200"], basic_auth=("user", "password"))

        # 使用现有连接实例化ElasticsearchEmbedding
        embeddings = ElasticsearchEmbedding.from_es_connection(
            model_id,
            es_connection,
            input_field=input_field,
        )

"""
        client = MlClient(es_connection)
        return cls(client, model_id, input_field=input_field)

    @classmethod
    def from_credentials(
        cls,
        model_id: str,
        es_url: str,
        es_username: str,
        es_password: str,
        input_field: str = "text_field",
    ) -> BaseEmbedding:
        """从Elasticsearch凭据实例化嵌入。

Args:
    model_id (str): 部署在Elasticsearch集群中的模型的model_id。
    input_field (str): 文档中输入文本字段的键的名称。默认为'text_field'。
    es_url: (str): 要连接的Elasticsearch URL。
    es_username: (str): Elasticsearch用户名。
    es_password: (str): Elasticsearch密码。

示例:
    .. code-block:: python

        from llama_index.embeddings.bedrock import ElasticsearchEmbedding

        # 定义模型ID和输入字段名称(如果与默认值不同)
        model_id = "your_model_id"
        # 可选,仅当与'text_field'不同时
        input_field = "your_input_field"

        embeddings = ElasticsearchEmbedding.from_credentials(
            model_id,
            input_field=input_field,
            es_url="foo",
            es_username="bar",
            es_password="baz",
        )

"""
        es_connection = Elasticsearch(
            hosts=[es_url],
            basic_auth=(es_username, es_password),
        )

        client = MlClient(es_connection)
        return cls(client, model_id, input_field=input_field)

    def _get_embedding(self, text: str) -> List[float]:
        """为单个查询文本生成嵌入。


Args:
    text(str):要生成嵌入的查询文本。

Returns:
    List[float]:输入查询文本的嵌入。
"""
        response = self._client.infer_trained_model(
            model_id=self.model_id,
            docs=[{self.input_field: text}],
        )

        return response["inference_results"][0]["predicted_value"]

    def _get_text_embedding(self, text: str) -> List[float]:
        return self._get_embedding(text)

    def _get_query_embedding(self, query: str) -> List[float]:
        return self._get_embedding(query)

    async def _aget_query_embedding(self, query: str) -> List[float]:
        return self._get_query_embedding(query)

from_es_connection classmethod #

from_es_connection(
    model_id: str,
    es_connection: Any,
    input_field: str = "text_field",
) -> BaseEmbedding

从现有的Elasticsearch连接实例化嵌入。

该方法提供了一种使用现有的Elasticsearch连接创建ElasticsearchEmbedding类实例的方式。连接对象用于创建MlClient,然后用于初始化ElasticsearchEmbedding实例。

Args: model_id (str): 部署在Elasticsearch集群中的模型的model_id。 es_connection (elasticsearch.Elasticsearch): 现有的Elasticsearch连接对象。 input_field (str, 可选): 文档中输入文本字段的键的名称。默认为'text_field'。

Returns: ElasticsearchEmbedding: ElasticsearchEmbedding类的实例。

示例

.. code-block:: python

from elasticsearch import Elasticsearch

from llama_index.embeddings.elasticsearch import ElasticsearchEmbedding

# 定义模型ID和输入字段名称(如果与默认值不同)
model_id = "your_model_id"
# 可选,仅当与'text_field'不同时使用
input_field = "your_input_field"

# 创建Elasticsearch连接
es_connection = Elasticsearch(hosts=["localhost:9200"], basic_auth=("user", "password"))

# 使用现有连接实例化ElasticsearchEmbedding
embeddings = ElasticsearchEmbedding.from_es_connection(
    model_id,
    es_connection,
    input_field=input_field,
)
Source code in llama_index/embeddings/elasticsearch/base.py
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
    @classmethod
    def from_es_connection(
        cls,
        model_id: str,
        es_connection: Any,
        input_field: str = "text_field",
    ) -> BaseEmbedding:
        """从现有的Elasticsearch连接实例化嵌入。

该方法提供了一种使用现有的Elasticsearch连接创建ElasticsearchEmbedding类实例的方式。连接对象用于创建MlClient,然后用于初始化ElasticsearchEmbedding实例。

Args:
model_id (str): 部署在Elasticsearch集群中的模型的model_id。
es_connection (elasticsearch.Elasticsearch): 现有的Elasticsearch连接对象。
input_field (str, 可选): 文档中输入文本字段的键的名称。默认为'text_field'。

Returns:
ElasticsearchEmbedding: ElasticsearchEmbedding类的实例。

示例:
    .. code-block:: python

        from elasticsearch import Elasticsearch

        from llama_index.embeddings.elasticsearch import ElasticsearchEmbedding

        # 定义模型ID和输入字段名称(如果与默认值不同)
        model_id = "your_model_id"
        # 可选,仅当与'text_field'不同时使用
        input_field = "your_input_field"

        # 创建Elasticsearch连接
        es_connection = Elasticsearch(hosts=["localhost:9200"], basic_auth=("user", "password"))

        # 使用现有连接实例化ElasticsearchEmbedding
        embeddings = ElasticsearchEmbedding.from_es_connection(
            model_id,
            es_connection,
            input_field=input_field,
        )

"""
        client = MlClient(es_connection)
        return cls(client, model_id, input_field=input_field)

from_credentials classmethod #

from_credentials(
    model_id: str,
    es_url: str,
    es_username: str,
    es_password: str,
    input_field: str = "text_field",
) -> BaseEmbedding

从Elasticsearch凭据实例化嵌入。

Parameters:

Name Type Description Default
model_id str

部署在Elasticsearch集群中的模型的model_id。

required
input_field str

文档中输入文本字段的键的名称。默认为'text_field'。

'text_field'
es_url str

(str): 要连接的Elasticsearch URL。

required
es_username str

(str): Elasticsearch用户名。

required
es_password str

(str): Elasticsearch密码。

required
示例

.. code-block:: python

from llama_index.embeddings.bedrock import ElasticsearchEmbedding

# 定义模型ID和输入字段名称(如果与默认值不同)
model_id = "your_model_id"
# 可选,仅当与'text_field'不同时
input_field = "your_input_field"

embeddings = ElasticsearchEmbedding.from_credentials(
    model_id,
    input_field=input_field,
    es_url="foo",
    es_username="bar",
    es_password="baz",
)
Source code in llama_index/embeddings/elasticsearch/base.py
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
    @classmethod
    def from_credentials(
        cls,
        model_id: str,
        es_url: str,
        es_username: str,
        es_password: str,
        input_field: str = "text_field",
    ) -> BaseEmbedding:
        """从Elasticsearch凭据实例化嵌入。

Args:
    model_id (str): 部署在Elasticsearch集群中的模型的model_id。
    input_field (str): 文档中输入文本字段的键的名称。默认为'text_field'。
    es_url: (str): 要连接的Elasticsearch URL。
    es_username: (str): Elasticsearch用户名。
    es_password: (str): Elasticsearch密码。

示例:
    .. code-block:: python

        from llama_index.embeddings.bedrock import ElasticsearchEmbedding

        # 定义模型ID和输入字段名称(如果与默认值不同)
        model_id = "your_model_id"
        # 可选,仅当与'text_field'不同时
        input_field = "your_input_field"

        embeddings = ElasticsearchEmbedding.from_credentials(
            model_id,
            input_field=input_field,
            es_url="foo",
            es_username="bar",
            es_password="baz",
        )

"""
        es_connection = Elasticsearch(
            hosts=[es_url],
            basic_auth=(es_username, es_password),
        )

        client = MlClient(es_connection)
        return cls(client, model_id, input_field=input_field)