es查询--请求body

查询的JSON结构
普通查询
{
    "query": {  # 查询条件
        "match_all": {}  //匹配所有文档, 所有 _score 为1.0
        # "match_all": {"boost": 1.2}  # 改变 _score
        # "match_none" {}  # 不匹配任何文档
    },
    "_source": ["field1", "field2"]  # 指定查询结果返回的字段, 不指定返回所有字段
    "size": 10  # 返回10条结果, 默认10
    "from": 10  # 从第10条(索引从0开始)开始返回, 默认0
    "sort": {  # 指定排序规则, 不指定按照相似度得分降序排序
        "field": {"order": "desc"}  # field字段降序排序
    }
}
多条件查询
{
    "query": {
        "bool": {  # 合并多个查询
            "must": [  # field字段包含v1且包含v2
                {"match": {"field": "v1"}},
                {"match": {"field": "v2"}}
            ],
            "should": [  # field字段包含v1或包含v2
                {"match": {"field": "v1"}},
                {"match": {"field": "v2"}}
            ],
            "must_not": [  # field字段既不包含v1也不包含v2
                {"match": {"field": "v1"}},
                {"match": {"field": "v2"}}
            ],
            "filter": [  # 过滤, 过滤中的条件不会影响文档得分且可以被缓存
                {
                    "range": {  # 范围查询, 支持 gt, gte, lt, lte
                        "field": {   # field >= 20000 and field <= 30000
                            "gte": 20000,
                            "lte": 30000
                        }
                    }
                },
                {"term": {"field": "v1"}},  # field字段包含v1
            ]
        }
    }
}
全文查询
  • match 模糊匹配和短语或邻近查询
  • match_phrase 匹配精确短语或单词邻近匹配
  • match_phrase_prefix 对最后一个单词进行通配符搜索
  • multi_match 多字段查询
  • common 一个更专业的查询,它更多地优先考虑不常见的单词
  • query_string 支持紧凑的Lucene 查询字符串语法,允许您在单个查询字符串中指定AND | OR | NOT条件和多字段搜索。仅限专家用户。
  • simple_query_string 一种更简单,更健壮的query_string语法版本,适合直接向用户公开。
  • intervals 全文查询,允许对匹配术语的排序和接近度进行细粒度控制

body

query

match 模糊搜索

{
    "query": {
        "match": {
            "field": "四个 图形"  # field字段包含 "四个" 或 "图形"
        }
    }
}

{
    "query": {
        "match": {
            "field": {  # field字段包含 "四个" 且包含 "图形"
                "query": "四个 图形",
                "operator": "and",  # 支持 and 和 or 默认为 or
                "zero_terms_query": "all",  # "none" or "all", 当查询结果为空时, 展示所有文档
                "cutoff_frequency": 0.001,  # 将查询分解成两组,一组高频一组低频
                "auto_generate_synonyms_phrase_query": False,  # 近似词相关配置
            }
        }
    }
}

match_phrase 短文本搜索

{
    "query": {
        "match": {
            "field": {  # field字段包含 "四个图形" 的文档(所匹配文本之间允许有标点但不能有字词)
                "query": "四个 图形",
                "zero_terms_query": "all",  # "none" or "all", 当查询结果为空时, 展示所有文档
                "analyzer": "my_analyzer",  # 
            }
        }
    }
}

match_phrase_prefix 短文本搜索, 支持前缀匹配

比如 50 可以匹配到 500, 但中文下一个字就是一个词, 所以一般用不到

{
    "query": {
        "match": {
            "field": {  # 查询field字段包含以 50 开头的词的文档
                "query": "50",
                "max_expansions": 10, 最多向后匹配的字符数
            }
        }
    }
}

multi_match 同时匹配多字段

点击查看官方文档

{
    "query": {
        "match": {
            "query": "2018",
            "fields": ["field1", "field2"],
            # "fields": ["*_name"],  # 支持使用通配符匹配字段
            # "fields": ["field1 ^ 3", "field2"],  # 使用 ^ 提升某个字段的重要性
        }
    }
}
posted @ 2019-06-16 14:54  _殇  阅读(2730)  评论(0编辑  收藏  举报