Solr 9向量存入错误字段求助:如何指定knn_vector字段存储
问题描述
在Solr 9中尝试索引稠密向量,已在managed-schema.xml中添加以下配置,将名为vector的字段设置为knn_vector类型:
<fieldType name="knn_vector" class="solr.DenseVectorField" vectorDimension="768" similarityFunction="euclidean"/> <field name="vector" type="knn_vector" indexed="true" stored="true"/>
但Solr自动创建了一个名为vectors的pdoubles类型字段:
<field name="vectors" type="pdoubles"/>
数据处理及Solr操作代码如下:
embedder = SentenceTransformer('distilbert-base-nli-stsb-mean-tokens') corpus = [documents[d]['paragraph'] for d in documents] corpus_embeddings = embedder.encode(corpus, convert_to_tensor=False) d=0 for row in corpus_embeddings: documents[str(d)]['vectors']=np.array(row).tolist() d=d+1
import pysolr solr = pysolr.Solr('http://localhost:8983/solr/VectorPilotRun/', always_commit=True, timeout=10) results=solr.search("{!knn f=vector topK=10}"+str(documents['500']['vectors'])) print("Saw {0} result(s).".format(len(results))) for result in results: print("The details are : '{0} {1} {2}'\n.".format(result['id'],result['paragraph'],result['paragraph_num']))
目前查询vector字段返回null,无结果,推测所有向量数据都存入了vectors(pdoubles)字段而非vector(knn_vector)字段。使用pysolr传入浮点型列表向量,需要解决如何让数据存入正确的knn_vector类型字段,避免Solr自动创建错误字段。
解决方案
- 修正数据字段名:代码中把向量存入了
vectors字段,但schema里定义的目标字段是vector,字段名不匹配导致Solr自动创建新的pdoubles类型字段。修改数据处理代码中的字段名:d=0 for row in corpus_embeddings: documents[str(d)]['vector']=np.array(row).tolist() # 把'vectors'改为'vector' d=d+1 - 确保向量格式与维度匹配:确认生成的向量维度是768,与
managed-schema.xml中vectorDimension="768"的配置一致,避免因维度不匹配导致数据无法存入目标字段。 - 禁用自动字段创建:为防止后续Solr自动创建未定义的字段,在
solrconfig.xml中找到updateHandler相关配置,设置autoCreateFields="false":<updateHandler class="solr.DirectUpdateHandler2"> <autoCreateFields>false</autoCreateFields> </updateHandler> - 清理错误字段并重新索引:删除Solr中自动创建的
vectors字段,然后重新运行数据索引代码,确保向量数据正确写入vector字段。
内容的提问来源于stack exchange,提问作者atulbhushan
相关产品推荐
相关产品推荐

