例子数据:假设现在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);
结果
3 matchPhraseQuery 词组搜索,传入值的分词结果必须在text字段分词中都包含,而且顺序必须相同,而且必须都是连续的
搜索 (数据) 匹配2 数据 测试数据
需要注意的是 matchquery的 operator 为and查询的关键字是无序就可以匹配,而matchPhraseQuery必须是有顺序的
| 传入keyword | 查询字段 | 概念 |
termquery | 不分词 | 不分词 | 准确匹配 |
terms | 不分词(可传入多个词条) | 不分词(匹配某个含有多个词条的字段) | 准确匹配 |
matchquery | 分词(可以选择分词器) | 分词(存储数据时选择的分词器) | 分词匹配 |
matchphrasequery | 不分词 | 分词(存储数据时选择的分词器) | keyword匹配分词 |
match_all | | | 匹配所有文档 |
multi_match | 分词(可以选择分词器) | 分词(存储数据时选择的分词器) | 可以通过 fields 参数针对多个字段查询 |
prefix | | | 前缀查询,类似term |
range | | | 范围查询 |