Elasticsearch的学习以及其JAVA API的使用

此文章主要整理Elasticsearch的实际使用中遇到的一些搜索技巧以及JAVA API的调用方法。后续会不断地补充。

目录

简单搜索

Match All Query

Term Query

Match Query

Boolean

Phrase和Phrase_prefix

MultiMatch Query

Wildcard Query

Query String Query

复合查询

Bool Query

JAVA API

连接ES集群

获取文档

删除文档

添加或更新文档

Bulk

搜索

在Java中使用scrolls

多搜索API

使用聚合

使用搜索模板

 查询删除


  • 简单搜索

一条搜索的json语句如下:

{
  "query": {
    ... 
  }
}
可以指定起始值和返回结果数实现分页查询,如下:

{
    "from": 0,
    "size": 10,
    "query": {
        "match_all": {}
    }
}

如果不指定分页数的话默认起始值是0,返回结果数是10。

可以选择性的加载一部分字段,如下:

{
  "fields": [
    "userId"
  ],
  "query": {
    "match_all": {}
  }
}

表示Hits结果只加载userId字段,如果fields字段为空或不存在则只返回"_index","_type","_id","_score"这些字段

  • Match All Query

{
    "query": {
        "match_all": {}
    }
}
matchAllQuery表示查询匹配全部文档。其对应的Java类为MatchAllQueryBuilder。
  • Term Query

{
  "query": {
    "term" : { "user" : "Kimchy" } 
  }
}

termQuery表示精确匹配搜索,不对内容进行分词。即实例中表示是查找内容的user字段的值为Kimchy的文档。其对应的Java为

TermQueryBuilder。有多个构造器第一个参数为要匹配字段,第二个参数为匹配值。

eg:

QueryBuilders.termQuery("name", "你的名字。")
  • Match Query

{
  "query": {
    "match": {
      "name": "甜心格格 第二季"
    }
  }
}

matchQuery匹配单个字段查询,即查询name字段名为"甜心格格 第二季"的文档。其对应的JAVA类为MatchQueryBuilder。

{
  "query": {
    "match": {
      "_all": "你神"
    }
  }
}

如果字段为“_all”则表示对所有字段进行检索。matchQuery有三种类型:booleanphrase,phrase_prefix。

  • Boolean

boolean是默认类型。根据官网文档,设置为boolean时意味着对所提供的文本进行分析,并且分析过程根据所提供的文本构造布尔查询。设置operator可以控制,默认为or。即会对给出的值进行分词。minimum_should_match 用来设置最小分词匹配数。

  • Phrase和Phrase_prefix

phrase和phrase_prefix都可以检索短语。不同的是phrase_prefix可以在最后一个词进行前缀匹配。

eg:

{
  "query": {
    "match_phrase_prefix": {
        "name": "quick brown f"
    }
  }
}
  • MultiMatch Query

{
  "query": {
    "multi_match": {
      "query": "你的名字(花絮预告)",
      "fields": [
        "name",
        "awards"
      ]
    }
  }
}

multiMatchQuery是多个字段匹配值。field字段可以使用通配符指定。比如*_name可以匹配例如first_name与last_name这样的字段。^可以提升字段的重要度,例如name^3。

它的type属性可以被设置为best_fields、most_fields、cross_fields、phrase、phrase_prefix这几种。具体的用法今后再研究。

对应的JAVA类为MultiMatchQueryBuilder。

ps:还有一种用法

{
  "query": {
    "term": {
      "all_worlds": "日本"
    }
  }
}

这样会查找所有字段中包含“日本”的文档。

  • Wildcard Query

{
  "query": {
    "wildcard": {
      "name": "*的*"
    }
  }
}

wildcardQuery是模糊查询。?匹配单个字符,*匹配多个字符。JAVA类WildcardQueryBuilder。

  • Query String Query

{
    "query": {
        "query_string" : {
            "query" : "(new york city) OR (big apple)"
        }
    }
}
Parameter Description

query

The actual query to be parsed. See Query string syntax.

default_field

The default field for query terms if no prefix field is specified. Defaults to the index.query.default_field index settings, which in turn defaults to _all.

default_operator

The default operator used if no explicit operator is specified. For example, with a default operat

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
根据提供的引用内容,以下是使用Elasticsearch Java API进行别名查询的示例: ```java import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.builder.SearchSourceBuilder; public class ElasticsearchAliasQueryExample { public static void main(String[] args) { // 创建RestHighLevelClient实例 RestHighLevelClient client = new RestHighLevelClient(); try { // 创建SearchRequest对象 SearchRequest searchRequest = new SearchRequest("your_index_name"); // 创建SearchSourceBuilder对象 SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); // 设置查询条件,这里使用别名查询 searchSourceBuilder.query(QueryBuilders.termQuery("your_alias_name", "your_search_term")); // 将SearchSourceBuilder对象设置到SearchRequest中 searchRequest.source(searchSourceBuilder); // 执行查询 SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); // 处理查询结果 // ... } catch (IOException e) { e.printStackTrace(); } finally { // 关闭RestHighLevelClient连接 try { client.close(); } catch (IOException e) { e.printStackTrace(); } } } } ``` 请注意,上述示例中的"your_index_name"和"your_alias_name"需要替换为实际的索引名称和别名名称。"your_search_term"需要替换为您要搜索的实际术语。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值