【ES】--Elasticsearch DSL的简单查询
发布时间:2026/10/31 14:24:55 锦皓数字建站

目录一、前言二、DSL的简单查询1、相关字段的设置2、match查询3、match_all查询4、term/terms等值查询5、wildcard、prefix、fuzzy查询6、正则(regexp)查询7、组合(bool)查询8、query_string查询9、match_phrase查询10、match_pharse_prefix查询11、match_bool_prefix查询12、multi_match查询13、range查询一、前言ES中常见的查询类型分为简单查询、复合查询、聚合查询等。这里基于这些查询进行详细的介绍。Elasticsearch DSL的简单查询操作如下:**term查询**:单词查询,在字段的倒排索引(发生分词)或者直接在字段值(未发生分词)中查找条件值,只要找到这个条件值就算匹配上,得分为1。**terms查询**:多个单词查询,效果为 多个 term 或者的逻辑。**match查询**:分词后搜索。比如分词后有N个分词,只要匹配上其中一个就可以返回数据。 根据文档中实际存储的字段类型(是否为分词文本 text,keyword 不会进行分词),决定是否对条件值进行分词; 若未分词,直接以条件值执行 term 查询; 若分词,则对条件值进行,分词处理:(a)若得到一个词,也是执行term查询(b)若得到多个词,默认执行 terms 查询(多个单词 或者关系)(c)也可以手动指定为“且”关系(为且,倒排索引后的词表中要包含 条件分词后的 所有单词),通过以下方式指定 match 单词之间的关系。默认operator是or。**match_phrase**:不做分词,以当前条件值到文档字段中进行“连续且位置顺序一致的”文本匹配。**match_pharse_prefix**:同样是以 条件不做分词到文档字段中查询,但是条件最后的 单词不是必须匹配字段内的完整单词。【只要是一个前缀包含的连续文本就能匹配】 例如 文档字段为 i love you 查询条件为 i love yo match_phrase下无法匹配,因为 文档中 you 是一个完整的单词;match_pharse_prefix 就可以匹配。**match_bool_prefix**:条件进行分词,执行 boolshould 查询。前面的词 做 term 查询,最后一个词做 perfix 查询。**match_all查询**:查询所有数据【一般测试使用】。 全文检索(full text)查询:利用分词器对文本内容分词,然后倒排索引匹配【例如match_query,multi_match_query】。**multi_match查询**:将条件应用到多个文档字段上进行匹配。**精确查询**:根据精确词条值查找数据,一般是查找keyword、数值、日期、boolean等类型字段【例如ids,range,term】。**wildcard查询(通配符查询)**:通配符查询,支持*和?。*:匹配0个或多个任意字符?:匹配1个任意字符二、DSL的简单查询为了更好的去理解ES简单查询操作的结果情况,我们要思考一个问题:(1)、在实际查询时,往往有的字段进行查询匹配,时常无法搜索到数据,ES搜索匹配到底受哪些因素影响?====为了说明更好的解释分析,需要相关字段进行mapping设置,具体结合字段的分词等属性,然后再结合简单查询操作,来有效分析查询结果。1、相关字段的设置knowledge_name字段要查询的knowledge_name字段的ES设置属性如下"knowledge_name":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256,"normalizer":"lowercase_normalizer"},"pinyin":{"type":"text","analyzer":"pinyin_analyzer"}},"analyzer":"ts_match_analyzer"}"ts_match_analyzer":{"filter":["lowercase"],"char_fi
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。