如何使用elasticsearch java api进行动态搜索?

时间:2014-11-05 12:02:32

标签: elasticsearch

所以我尝试使用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,我仍会在术语过滤器上获得命中。

1 个答案:

答案 0 :(得分:1)

查询是搜索某些内容时的主要组件,它考虑了排名和其他功能,如词干,同义词和其他内容。另一方面,过滤只是过滤从查询中获得的结果集。

我建议如果你不关心排名使用过滤器,因为它们更快。否则,请使用查询。