标签:date des online end 流行 搜索 blog term 缓存
1、must和filter的区别。
可以简单的理解为,filter有缓存,must无缓存。
如:
$conditions[‘bool‘][‘must‘][]
和
$conditions[‘bool‘][‘filter‘][]
2、针对文本型的查询,使用match
match会进行分词匹配。
如
$conditions[‘bool‘][‘filter‘][] = [‘match‘ => [‘title‘ => [‘query‘=> $title , "operator"=>"and"]],];
意思是匹配所有$title的分词。
比如$title是"2017夏季女装",分词可能会分为2017,夏季,女装。
那么如果operator的值是and,则表示,需要满足所有条件的才会匹配。
比如
"2017的夏季漂亮的女装"
"2017的夏季流行的男装和女装"
"夏季唯美女装,2017"
会匹配。
比如:
"2017的夏季漂亮的男装"就不会匹配。
因为没有"女装"这个分词。
如果operator的值是or,则表示只需要满足其中一个分词就会匹配。
3、如果是固定的关键词,则使用term
比如:
$conditions[‘bool‘][‘filter‘][] = [‘term‘ => [‘is_hot‘ => 1]],
匹配is_hot为1的数据
4、或搜索。在ElasticSearch中,或搜索,就是should
如:二选一
$conditions[‘bool‘][‘filter‘][] = [ ‘should‘ =>[ [‘term‘ => [‘is_hot‘ => 1]], [‘term‘ => [‘is_online‘ => 1]], ], ‘minimum_number_should_match‘ => 1, ];
命中is_hot为1,或者is_online为1的情况。
5、范围搜索。range
如:
$conditions[‘bool‘][‘filter‘][] = [ [‘range‘ => [‘num‘ => [‘gte‘ => 100],],], // 数量大于等于100 [‘range‘ => [‘price‘ => [‘gt‘ => 0],],], // 价格大于0 [‘range‘ => [‘end_time‘ => [‘gte‘ => date(‘Y-m-d‘)],],], // 过期时间 [‘range‘ => [‘start_time‘ => [‘lte‘ => date(‘Y-m-d H:i:s‘)]]],// 开始时间 ];
6、全部凑一起后,准备好的用于ElasticSearch查询的json数据
{ "bool": { "filter": [ { "range": { "num": { "gte": 100 } } }, { "range": { "price": { "gt": 0 } } }, { "range": { "end_time": { "gte": "2017-05-04" } } }, { "range": { "start_time": { "lte": "2017-05-04 10:03:16" } } }, { "term": { "is_delete": 0 } }, { "bool": { "should": [ { "term": { "is_hot": 1 } }, { "term": { "is_online": 1 } } ], "minimum_number_should_match": 1 } }, { "bool": { "should": [ { "match": { "title": { "query": "2017夏季女装", "operator": "and" } } }, { "match": { "desc": { "query": "2017夏季女装", "operator": "and" } } } ], "minimum_number_should_match": 1 } } ] } }
标签:date des online end 流行 搜索 blog term 缓存
原文地址:http://www.cnblogs.com/codeaaa/p/6805579.html