ElasticSearch基础使用

Posted PHP重构工坊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ElasticSearch基础使用相关的知识,希望对你有一定的参考价值。


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
                }
            }
        ]
    }
}

 

以上是关于ElasticSearch基础使用的主要内容,如果未能解决你的问题,请参考以下文章

小烨收藏ElasticSearch权威指南-入门

使用标准库Ruby将数据标记到Elasticsearch批量中

[vscode]--HTML代码片段(基础版,reactvuejquery)

Elasticsearch笔记九之优化

Elasticsearch:如何在 Elasticsearch 中正确使用同义词功能

Elasticsearch:如何在 Elasticsearch 中正确使用同义词功能