Elasticsearch [2.0] ☞ Java Client API ☞ Query DSL

Query DSL

elasticsearch 提供一个使用java实现的REST Query DSL查询。查询的工厂方法是QueryBuilders。一旦你准备好了你就可以使用Search API.

import static org.elasticsearch.index.query.QueryBuilders.*;

注意 我们可以使用toString方法轻松的打印出JSON格式。

Match All Query

详见Match All Query

QueryBuilder qb = matchAllQuery();

注意匹配所有的,其中注意参数boost因子。

Full text queries

全文查询通常需要配合analyzer(或者search_analyzer)来进行特定领域的全文搜索(例如中文分词等相关插件)
全文查询包含:

match query

标准的全文查询匹配,包含模糊匹配和短语或者近似查询。详见Match Query

QueryBuilder qb = matchQuery(
    "name",                     // 1      
    "kimchy elasticsearch"      // 2
);
  1. 查询字段
  2. 查询文本

multi_match query

多字段匹配查询,详见Multi Match Query.

QueryBuilder qb = multiMatchQuery(
    "kimchy elasticsearch",   // 1
    "user", "message"         // 2
);
  1. 搜索的文本
  2. 使用的字段(可以有多个)

common_terms query

更专业查询,它提供了更多的不常见查询。 详见Common Terms Query

QueryBuilder qb = commonTermsQuery("name",    // 1
                                   "kimchy"); // 2
  1. 查询字段
  2. 查询值

query_string query

支持小型的Luence查询,使用字符串语法,你可以指定 AND 或 OR 或 NOT条件和一个多条件查询的搜索。仅限于专业用户使用。

QueryBuilder qb = queryStringQuery("+kimchy -elasticsearch"); // 1
  1. 查询文本

simple_query_string

一个更简单的,更强大的query_string语法查询,适合直接暴露给用户。

QueryBuilder qb = simpleQueryStringQuery("+kimchy -elasticsearch"); // 1
  1. 查询文本

注意这里解释下上面这个查询:

意思是”一定要有kimchy并且一定不含有elasticsearch”
参照Lucene语法规则http://www.oschina.net/question/1092_560

Term level queries 精确查询

While the full text queries will analyze the query string before executing, the term-level queries operate on the exact terms that are stored in the inverted index.

精确查询往往用于像数字、日期、以及枚举类型的查询而不是全文查询。或者它们允许你在低纬度上面执行分析工作。
精确查询包括

  1. term query
    精确查询文本中包含的内容
  2. terms query
    在指定的多个字段的中查找包含的内容(只要任意一个字段必然含有即可)
  3. range query
    范围查询,可以指定值所在的范围(日期、数字或者字符串)
  4. exists query
    查找某个字段不为空的值(等同于SQL的IS NOT NULL)
  5. missing query
    查找字段中是不是没有值或者只包含空值。详见Missing Query
    java
    QueryBuilder qb = missingQuery("user"); // 1
    .existence(true) // 2
    .nullValue(true); // 3

    1. 查询的字段
    2. existence查找user为空的值(设置为true时候匹配为空的,当然如果不存在user字段也会匹配到)
    3. nullValue查找user为null的值(设置为true时候匹配为null的值)
  6. prefix query
    查找指定的字段中是否包含查询中的前缀。详见prefix query
    java
    QueryBuilder qb = prefixQuery(
    "brand", //1
    "heine" //2
    );

    1. 查找的字段
    2. 前缀内容
  7. Wildcard Query
    通配符查询,找到指定的字段中包含查找的模式。该模式支持单个字符通配符(?)和多个字符通配符(*),类似SQL中的LIKE的语法。详见 Wildcard Query

    QueryBuilder qb = wildcardQuery("user", "k?mc*");
    
  8. Regexp Query
    正则查询。使用正则表达进行匹配查询,正则语法详见。详见Regexp Query
    java
    QueryBuilder qb = regexpQuery(
    "name.first",
    "s.*y");
  9. Fuzzy Query
    Find documents where the field specified contains terms which are fuzzily similar to the specified term. Fuzziness is measured as a Levenshtein edit distance of 1 or 2.
    模糊查询.

    QueryBuilder qb = fuzzyQuery(
    "name",     
    "kimzhy"    
    );
  10. type query
    按照指定的类型查询

    QueryBuilder qb = typeQuery("my_type"); 
    
  11. IDs Query
    按照指定的类型和IDs进行查找

    QueryBuilder qb = idsQuery("my_type", "type2")
    .addIds("1", "4", "100");
    QueryBuilder qb = idsQuery()   // 1
    .addIds("1", "4", "100");
    1. type是一个可选的。其中第一个查询表示在type为my_type和type2两个钟查找ids为1,4,100的值

Compound queries

Joining queries

Geo queries

Specialized queries

Span queries

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值