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

本文详述了Elasticsearch的使用技巧,包括JAVA API的调用方法,如连接ES集群、搜索、删除、添加或更新文档、使用scrolls、多搜索API、聚合和搜索模板等。并提供了相关查询示例,如Match All Query、Term Query、Bool Query等。
摘要由CSDN通过智能技术生成

此文章主要整理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
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值