最近,Elasticsearch允许在查询中使用向量和稀疏向量。在他们的文档之后,我发现了一个错误,本质上是:
"type" : "illegal_argument_exception",
"reason" : "Variable [embedding] is not defined."
似乎“嵌入”不是一个成功的领域。
我将文档上传到Elasticsearch如下:
db_object = json.load(fp)
es.index(index=my_index, doc_type='sentence', id=db_object['name'], body=db_object)
这是我的json文件的结构(请注意,嵌入是字典,因为它是稀疏向量)。
{"name": "doc_name", "field_1": "doc_id", "field_2": "a_keyword", "text": "a rather long text", "embedding": {"4655": 0.040158602078116556, "4640": 0.040158602078116556}}
但是,如果我进行简单的测试查询,似乎无法进行嵌入。采用以下查询结构:
curl -X GET "localhost:9200/_search?pretty" -H 'Content-Type: application/json' -d'
{
"query": {
"query_string" : {
"query" : "0.040158602078116556",
"default_field" : "embedding"
}
}
}'
如果我离开embedding
“ default_field”,则找不到文档。
如果我尝试4655
作为字段(请注意,这是嵌入字典中与我粘贴到查询中的数字相对应的键),也不会发生任何事情。
但是,如果该字段是embedding.4655
查询工作。在我看来,这似乎是一个明确的信号,“嵌入”不是被理解为稀疏向量的单个字段,而是字典键与“嵌入”结合形成了一个具有数值的独立字段的集合。
另一个不正确的提示是,加载这样的文档使Elasticsearch抗议字段太多,而我原本希望“嵌入”是一个字段,而且只有一个字段。
我对么?我上载有关此特殊字段的文档的方式是否存在缺陷?
问题在于,Elasticsearch无法推断正确的类型。它认为字典中的每个键都是一个新字段(embedding.key)。因此,我们需要提供一个指定类型的映射。在我的情况下,在创建索引后使用Python中的elasticsearch库:
import requests
uri='http://localhost:9200/my_index/_mapping'
json_body="""{
"properties": {
"name": {
"type": "keyword"
},
"reference": {
"type": "keyword"
},
"jurisdiction": {
"type": "keyword"
},
"text": {
"type": "text"
},
"embedding": {
"type": "sparse_vector"
}
}
}""")
headers = {
'Content-Type': 'application/json',
}
requests.put(uri, headers=headers, data=json_body)
但它给出了一个错误。 我对Spark是新手,所以这可能很明显,在我的代码行中可能有明显的错误。请帮忙。谢谢!
在Java中,我与JGit合作,在远程存储库中执行一些操作。但是,当我依次在版本之间执行稀疏签出时: 它保留最后一个签出文件并添加新的签出文件。只有当目录中的文件名不相同时才会发生这种情况。以这种方式使用checkout命令时,如何避免这种情况? 我考虑过删除正在签出的文件夹中的文件(本例中是脚本),但我不知道当“下载”的文件具有相同的名称时,是否会带来冲突。
请看示例代码(注意 data 的数组下标): -- http://www.kyne.com.au/~mark/software/lua-cjson.php -- version: 2.1 devel local json = require("cjson") local data = {1, 2} data[1000] = 99 -- ... do the other things ngx.
我正在网上寻找稀疏图的好定义,但我很困惑。稀疏图实际上是一个具有数百万/数十亿节点的大图吗?一个例子是现实世界的一个——比如Facebook。或者它们也可以在小型网络中? 提前感谢!
问题内容: 我需要为索引中的所有文档添加一个新字段,而无需下拉文档并将其推回备份(这将需要大约一天的时间)。是否可以使用_BULK API实现此目的? 我还研究了update_by_query插件,似乎只需要将它们拉下并推回自己的位置即可。 问题答案: 是的,批量API支持更新,可以使用部分文档或脚本添加新字段。要遍历文档ID,请执行扫描并在将fields参数设置为空数组的情况下滚动。
我的原始模式包含许多我想在ML模型中使用的映射类型,因此我需要将它们转换为SparkML稀疏向量。 背景:SparkML模型要求将数据形成特征向量。有一些实用程序可以生成特征向量,但都不支持maptype类型。e、 g.SparkML VectorAssembler允许组合多个列(所有数字类型、布尔类型或向量类型)。 编辑: 到目前为止,我的解决方案是将映射分解为单独的列,然后使用向量汇编程序: