Elasticsearch-查询

想找到所有title字段以cri开始的文档

{
    "query":{
        "prefix":{
            "title":"cri"
        }
    }
}

用户向搜索框中输入单词crme,而不是crime,运行模糊查询的最简单形式

{
    "query":{
        "fuzzy":{
            "title":"crme"
        }
    }
}

通配符查询允许我们在查询值中使用*和?等通配符。此外,通配符查询跟词条查询在内容方面非常类似。可以发送一下查询,来匹配所有包含cr?me词条的文档,这里?表示任意字符:

{
    "query":{
        "wildcard":{
            "title":"cr?me"
        }
    }
}

范围查新,要找到year字段从1700到1900的所有图书,可以运行以下查询:

{
    "query":{
        "range":{
            "year":{
                "gte":1700,
                "lte":1900
            }
        }
    }
}
 gte:范围查询将匹配字段值大于或等于此参数值的文档。
 gt:范围查询将匹配字段值大于此参数值的文档。
 lte:范围查询将匹配字段值小于或等于此参数值的文档。
 lt:范围查询将匹配字段值小于此参数值的文档。

正则表达式查询示例如下所示:

{
    "query":{
        "regexp":{
            "title":{
                "value":"cr.m[ae]",
                "boost":10
            }
        }
    }
}

假设我们想要找到所有这样的文档:在title字段中含有crime词条,并且year字段可以在也可以不在1900~2000的范围里,在otitle字段中不可以包含nothing词条。用布尔查询的话,类似于下面的代码:

{
    "query":{
        "bool":{
            "must":{
                "term":{
                    "title":"crime"
                }
            },
            "should":{
                "range":{
                    "year":{
                        "from":1900,
                        "to":2000
                    }
                }
            },
            "must_not":{
                "term":{
                    "otitle":"nothing"
                }
            }
        }
    }
}

在title字段搜索Catch-22并向其添加过滤器.它返回给定title的所有文档,但结果缩小到仅在1961年出版的书

{
    "query":{
        "match":{
            "title":"Catch-22"
        }
    },
    "post_filter":{
        "term":{
            "year":1961
        }
    }
}

你可能感兴趣的:(Elasticsearch-查询)