#精确查询/模糊查询/term/match/terms/bool/should PUT zhifou/doc/1 { "name":"顾老二", "age":30, "from": "gu", "desc": "皮肤黑、武器长、性格直", "tags": ["黑", "长", "直"] } #结果过滤:_source GET zhifou/doc/_search { "query": { "match": { "name": "顾老二" } }, "_source": ["name", "age"] } #高亮显示 PUT zhifou/doc/4 { "name":"石头", "age":29, "from":"gu", "desc":"粗中有细,狐假虎威", "tags":["粗", "大","猛"] } GET zhifou/doc/_search { "query": { "match": { "name": "石头" } }, "highlight": { "fields": { "name": {} } } } #我们发现name被html高亮显示了。 #term查询查找包含文档精确的倒排索引指定的词条。也就是精确查找。 #term和match的区别是: # # match是经过analyer的,也就是说,文档首先被分析器给处理了。根据不同的分析器,分析的结果也稍显不同,然后再根据分词结果进行匹配。 # term则不经过分词,它是直接去倒排索引中查找了精确的值了。 PUT w1 { "mappings": { "doc": { "properties":{ "t1":{ "type": "text" }, "t2": { "type": "keyword" } } } } } PUT w1/doc/1 { "t1": "hi single dog", "t2": "hi single dog" } #上例的w1索引中,其字段t1再被查询时会被分析器进行分析后匹配查询。而t2属于keyword类型,不会被分析器处理。也就是下面的效果: GET _analyze { "analyzer": "keyword", "text": "hi single dog" } # keyword的结果:["hi single dog"] GET _analyze { "analyzer": "standard", "text": "hi single dog" } # standard的结果:["hi", "single", "dog"] GET w1/doc/_search { "query": { "term": { "t1": "hi" } } } GET w1/doc/_search { "query": { "term": { "t2": "hi" } } } GET w1/doc/_search { "query": { "match": { "t2": "hi single dog" } } } PUT w1/doc/2 { "t1": "20", "t2": "2019-4-16" } PUT w1/doc/3 { "t1": "30", "t2": "2019-4-17" } GET w1/doc/_search { "query": { "bool": { "should": [ { "term": { "t1": "20" } }, { "term": { "t1": "30" } } ] } } } #除了使用bool查询之外,我们还可以使用terms查询。terms就相当于term的复数形式(单词里面的s嘛)。使用方式与term也一样,只是将多个条件改为数组即可 GET w1/doc/_search { "query": { "terms": { "t1": ["20", "30"] } } } GET w1/doc/_search { "query": { "terms": { "t2": ["2019-4-16", "2019-4-17"] } } }
版权声明:除特别注明外,本站所有文章均为王晨曦个人站点原创
转载请注明:出处来自王晨曦个人站点 » elasticsearch研习(三)