ElasticSearch 基本操作
matchQuery
简单的 matchQuery 查询的内容会通过分词,分词后的数据进行检索,只要包含其中一个分词就会被检索出来
1 | searchRequestBuilder.setQuery(QueryBuilders.matchQuery("fieldD", "bigData is magic")); |
matchPhraseQuery
matchPhraseQuery 查询的内容通过分词,严格按照分词的出现的顺序进行查询,也就是必须包含所有分词,且出现数据的顺序一致
1 | searchRequestBuilder.setQuery(QueryBuilders.matchPhraseQuery("fieldD", "bigData spark is magic")); |
查询的字段是进行分词索引的,如果不是分词索引则不生效, 如果只是查询 bigData magic ,则这种查询是查询不到的,需要完全匹配,如果想要查询到,需要设置 slop(2),需要这样查询
1 | searchRequestBuilder.setQuery(QueryBuilders.matchPhraseQuery("fieldD", "bigData spark is magic").slop(2)) |
termQuery
termQuery 词精确查询,fieldD 分词后包含 bigData 的 term 的文档
1 | searchRequestBuilder.setQuery(QueryBuilders.termQuery("fieldD", "bigData")); |
termsQuery
termsQuery 多 term 查询,查询 fieldD 包含 bigData spark 或 storm 中的任何一个或多个的文档
1 | searchRequestBuilder.setQuery(QueryBuilders.termsQuery("fieldD", "bigData","spark","storm")); |
rangeQuery
rangeQuery 范围查询字段 fieldB 大于 20 并且小于 50 包含上下界
1 | searchRequestBuilder.setQuery(QueryBuilders.rangeQuery("filedB").gt("20").lt("50").includeLower(true).includeUpper(true)); |
prefixQuery
prefixQuery 匹配分词前缀 如果字段没分词,就匹配整个字段前缀
1 | searchRequestBuilder.setQuery(QueryBuilders.prefixQuery("fieldD","spark")); |
wildcardQuery
wildcardQuery 通配符查询,支持* 任意字符串;?任意一个字符
1 | searchRequestBuilder.setQuery(QueryBuilders.wildcardQuery("fieldD","spark*")); |
fuzzyQuery
fuzzyQuery 分词模糊查询,通过增加 fuzziness 模糊属性,来查询 term 如下 能够匹配 fieldD 为 spar park spark 前或后加一个字母的 term 的 文档 fuzziness 的含义是检索的 term 前后增加或减少 n 个单词的匹配查询
1 | searchRequestBuilder.setQuery(QueryBuilders.fuzzyQuery("fieldD","spark").fuzziness(Fuzziness.ONE)); |