精确查找
term 查询数字
term 可以用来处理数字, 布尔值, 日期, 及文本
如果不希望对查询评分计算, 只希望对文档包括或排除的计算, 可以使用 constant_score 查询 以非评分模式来执行 term 查询
term 查询文本
如果需要对文本字段进行精确查找, 需要将该字段设置为 not_analyzed (无需分析的) , 不然 es 会对其进行进行分析, 分析之后精确匹配就获取不到值了;
es 能够缓存非评分查询从而获取更快的访问,但是 它不会太聪明地缓存一些使用极少的东西, es 会为每个索引跟踪保留查询个历史状态, 如果查询留在最近的 256 次潮汛中被用到, 那么它就会被缓存到内存中
非评分计算是首先执行的
组合过滤器
如果查询是多条件的查询, 那么需要用到 bool 查询, bool 查询是个 复合过滤器, 它可以接受多个其他过滤器作为参数, 并将这些过滤器结合成各种各样的 布尔逻辑组合
布尔过滤器
一个bool 过滤器由三部分组成
must 所有的语句都必须(must) 匹配, 与and 等价
must_not 所有的语句都 不能(must_not) 匹配, 与 not 等价,
should 至少有一个语句要匹配, 与 or 等价
当我们需要多个过滤器的时候, 只需要将他们置入 bool 过滤器的不同部分即可, 上面的三部分 都是可选的, 不是必选的, 可以有一个, 也可以同时都存在
bool 过滤器 本身也是一个过滤器, 所以我们可以将 bool 过滤器置于其他bool 过滤器内部
term 和 terms 是 包含的意思, 而不是相等
精确相等
如果期望得到完全相等的查找怎么办? 最好的方式是 增加并索引另一个字段, 这个字段用以存储该字段包含词项的数量
范围:
range 可以对范围进行查找