Elasticsearch [2.0] ☞ Java Client API ☞ Query DSL

来源:互联网 发布:dirt rally for mac 编辑:程序博客网 时间:2024/04/27 20:25

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

0 0
原创粉丝点击