此文章主要整理Elasticsearch的实际使用中遇到的一些搜索技巧以及JAVA 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有三种类型:boolean
, phrase
,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 |
---|---|
|
The actual query to be parsed. See Query string syntax. |
|
The default field for query terms if no prefix field is specified. Defaults to the |
|
The default operator used if no explicit operator is specified. For example, with a default operat |