Elasticsearch RequestError报错:bool.filter字段解析失败求助
问题原因及解决方案
你的ES查询报错是因为把带script_score的nested查询放到了bool.filter数组里。filter的作用仅为过滤文档,不参与任何得分计算逻辑,而script_score是专门用来计算文档相关性得分的查询类型,两者不能兼容。
修正方案(二选一)
方案1:保留余弦相似度得分,同时过滤其他条件
如果需要基于余弦相似度计算文档得分,同时用bot_id和file_uuid过滤文档,把nested查询移到bool.must中:
{ "query": { "bool": { "filter": [ { "term": { "bot_id": "embedding_test" } }, { "terms": { "file_uuid": ["embedding_test"] } } ], "must": [ { "nested": { "path": "nba", "query": { "script_score": { "script": { "source": "cosineSimilarity(params.query_vector, doc['nba.embedding'].value) + 1.0", "params": { "query_vector": [1.0, 0.5, 0.2] } } } } } } ] } }, "size": 100, "min_score": 1.0 }
方案2:仅过滤符合余弦相似度条件的文档(不计算得分)
如果只是想筛选出余弦相似度达标的文档,不需要用它计算得分,把script_score换成script查询并放到nested.filter中:
{ "query": { "bool": { "filter": [ { "term": { "bot_id": "embedding_test" } }, { "terms": { "file_uuid": ["embedding_test"] } }, { "nested": { "path": "nba", "filter": { "script": { "source": "cosineSimilarity(params.query_vector, doc['nba.embedding'].value) + 1.0 >= params.min_score", "params": { "query_vector": [1.0, 0.5, 0.2], "min_score": 1.0 } } } } } ] } }, "size": 100 }
内容的提问来源于stack exchange,提问作者bugs_bunny_23
相关产品推荐
相关产品推荐

