所以我尝试使用elasticsearch进行动态查询构建。想象一下,我可以查询如下:
a = "something" AND b >= "other something" AND (c LIKE "stuff" OR c LIKE "stuff2" OR d BETWEEN "x" AND "y");
或者像这样:
(c>= 23 OR d<=43) AND (a LIKE "text" OR a LIKE "text2") AND f="text"
我应该使用QueryBuilder还是FilterBuilder,你如何匹配它们?官方文档说,对于确切的值,我们应该使用过滤方法?我假设我应该使用过滤器进行相同的比较?日期和数字怎么样?我应该使用过滤器还是查询?
对于数字/数字问题的Like / Equals,我尝试了这个:
@Field(type = String, index = FieldIndex.analyzed, pattern = "(\\d+\\/\\d+)|(\\d+\\/)|(\\d+)|(\\/\\d+)")
public String processNumber;
该模式将处理结构编号+斜杠+编号,还会编号和编号+斜杠。
但是当使用术语过滤器或match_query时,我无法获得具有20/2014这样精确结构的命中,如果我输入20,我仍会在术语过滤器上获得命中。
答案 0 :(得分:1)
查询是搜索某些内容时的主要组件,它考虑了排名和其他功能,如词干,同义词和其他内容。另一方面,过滤只是过滤从查询中获得的结果集。
我建议如果你不关心排名使用过滤器,因为它们更快。否则,请使用查询。