我将elasticsearch中的项目编入索引,其中每个项目都具有以下属性:
tags - array of strings eg. [ 'c++', 'java', 'python' ]
submitter_id - uuid
id - uuid
我也有这些属性的用户:
tags - array of strings
following_ids - array of uuids
我想要做的是查询弹性搜索,其中标签与用户的标签匹配,或者submitter_id是用户的follow_ids之一,我也提升字段。现在我像这样形成查询
"should"=>[{"match"=>{"tags"=>{"query"=>"yoga", "boost"=>3}}}, {"match"=>{"tags"=>{"query"=>"yogic technique", "boost"=>3}}},
{"match"=>{"tags"=>{"query"=>"lag jaa gale", "boost"=>3}}}, {"match"=>{"tags"=>{"query"=>"jonita gandhiband", "boost"=>3}}}
{"match"=>{"submitter_id"=>"fc8b720f-a306-4849-8bc1-38fafae7c92b"}},
{"match"=>{"submitter_id"=>"c35ec42f-2df0-4870-89a4-9e59c9df04ea"}}]
但是如果用户有很多标签或者following_ids,我很快会遇到最大条款限制。我应该怎么处理这个?
答案 0 :(得分:0)
由于您正在寻找确切的ID和标签,因此您应该使用Terms Query,但在这种情况下,您的附加优势是它允许您提供多个术语,因此您只需要1个子句用于所有标记,1用于用户ID。