例子数据:假设现在es中索引下的type下有5条cont数据为:数据, 测试数据 , 测试据数,据数 ,据

使用默认分词器:对应中文,会单字切分,例如 测试数据 这四个字会切分成 测,试,数,据 这四个单字索引

1.termquery:精确值搜索,传入值不分词,数据不分词

 例:搜索关键词(数)  结果为0个匹配,搜索关键词(数据)  结果匹配 数据 这个cont

2matchquery:全文本搜索,对于test类型的字段,会首先对关键词分词,再去cont索引中匹配

注意:matchquery有一个属性operator(值为 and或or),and就是全部匹配,or就是匹配一个即可,默认为or

例:搜索(数) 结果匹配4个 数据, 测试数据 , 测试据数,据数,只要有数的能搜到

     搜索(数据) 结果匹配5 数据, 测试数据 , 测试据数,据数 ,据  解释:首先关键词 (数据)被分为数 和 据 ,再去cont索      引中查找,由于operator默认为or,只要匹配上一个即可,所以可以查出5个

    搜索(数据)并将operator设置为and   结果匹配4 数据, 测试数据 , 测试据数,据数   解释:首先关键词 (数据)被分为数 和 据 ,再去cont索引中查找,由于operator为and,而 据就匹配一个字不符合and,所以查出4个

搜索:设置operator为and
MatchQueryBuilder mq1 = QueryBuilders.matchQuery("qzmc", "搜索").operator(Operator.AND);

结果

java es 条件查询 boolQueryWrapper es多条件查询or或查询_搜索


3 matchPhraseQuery 词组搜索,传入值的分词结果必须在text字段分词中都包含,而且顺序必须相同,而且必须都是连续的


   搜索 (数据) 匹配2 数据 测试数据

 

需要注意的是 matchquery的 operator 为and查询的关键字是无序就可以匹配,而matchPhraseQuery必须是有顺序的

 

传入keyword

查询字段

概念

termquery

不分词

不分词

准确匹配

terms

不分词(可传入多个词条)

不分词(匹配某个含有多个词条的字段)

准确匹配

matchquery

分词(可以选择分词器)

分词(存储数据时选择的分词器)

分词匹配

 matchphrasequery

不分词

分词(存储数据时选择的分词器)

keyword匹配分词

match_all

 

 

匹配所有文档

multi_match

分词(可以选择分词器)

分词(存储数据时选择的分词器)

可以通过

fields 参数针对多个字段查询

prefix

 

 

前缀查询,类似term

range

 

 

范围查询