es的全文索引、丰富的搜索api是她受欢迎的一个重要原因。DSL查询语句,可以让用户定制各类型的查询、聚类语句。
基本概念:
term:词项,即索引的小单元,文本搜索时小的匹配单元。
match查询语句,match和term查询的大区别在于,term查询会将查询词当为词项,并在倒排索引中进行全匹配。match查询会先进行分词处理,再将解析后的词项去查询,"minimum_should_match",可以控制match的查询词中小应该匹配的比例。
match_phrase,句子查询,和match的区别,phrase是句子,句子内部要保持信息一致,所以match_phrase查询将全匹配句子所有文字,并且保证文字之间的相对位置。es提供了slop等查询控制,给用户去调整文字间相对位置的距离。slop:1 以为着 查询词“帅哥”,可以匹配到“帅*哥”,中间可以有一个文本的距离。
boost,控制单个查询语句在整体查询语句中的权重。
bool逻辑查询,should,must,should_not, must_not,可以和match、term查询进行嵌套。"minimum_should_match",在这里也可以控制should的处理个数。( 可以组合match bool,match_phrase来保证文本的相对位置,以及允许少匹配文本个数。)
aggs,聚合查询。强大的聚合查询,根据用户设置的桶处理条件,可以进行桶內数据的sum,min,max,统计。terms桶,会根据terms处理字段,统计桶內同一文体聚类数量。聚合查询支持,嵌套桶,时间范围的桶等。
注意1:match_phrase_prefix查询,非常消耗资源,今天中午才进行测试时,成功一条查询,挂掉了本地es服务。
注意2:slop在处理list字段时,小心逗号造成的文本对象位置问题。可以在mapping时定义list分词时逗号文本的距离问题。