使用值数组查询Elasticsearch

时间:2017-12-28 18:55:37

标签: elasticsearch lucene

我将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,我很快会遇到最大条款限制。我应该怎么处理这个?

1 个答案:

答案 0 :(得分:0)

由于您正在寻找确切的ID和标签,因此您应该使用Terms Query,但在这种情况下,您的附加优势是它允许您提供多个术语,因此您只需要1个子句用于所有标记,1用于用户ID。