深入搜索--结构化搜索

精确查找

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 可以对范围进行查找


1



你可能感兴趣的:(深入搜索--结构化搜索)