elasticsearch 简单使用【php版本】

版本说明

{
  "goods": {
    "mappings": {
      "properties": {
        "brand": {
          "type": "keyword"
        },
        "content": {
          "type": "text",
          "analyzer": "ik_max_word"
        },
        "id": {
          "type": "integer"
        },
        "sort": {
          "type": "integer"
        },
        "title": {
          "type": "text",
          "analyzer": "ik_smart"
        }
      }
    }
  }
}
  • 进行操作时,新建es对象
use Elastic\Elasticsearch\ClientBuilder;
$client = ClientBuilder::create() ->setHosts(['localhost:9200']) ->build();

一些查询操作

我们使用es的情景大部分都是查询,下面列举一些常用的操作场景以及对应的代码

获取mapping结构

$response = $client->indices()->getMapping(['index'=>'goods_bak']);

批量批量插入数据

//$count 为从数据库中取的总数,$result为对应的结果集
for($i = 0; $i < $count; $i++) {
    $add_params['body'][] = [
        'index' => [
            '_index' => "goods",
            '_id' => ($i+1) . ""
        ],
    ];
    $add_params['body'][] = [
        'id' => $result[$i][0] + 1,
        'title' => $result[$i][1],
        'content' => $result[$i][2],
        'sort' => $result[$i][3],
        'brand' => $result[$i][4],
    ];
}
$responses = $client->bulk($add_params);

删除文档数据

$delete_params = [
    'index' => 'goods',
    'body' => [
        'query' => [
            'range' => [
                'id' => [
                	//删除id > 1的文档记录
                    'gte' =>1
                ]
            ]
        ]

    ]
];
$responses = $client->deleteByQuery($delete_params);

查询title中包含关键词懒虫的文档记录

// match 会对查询的关键词进行分词,term不会。例如查询华为手机,match会查询title中包含华为或者手机或者华为手机的,term不会对查询的关键词做拆分
//不支持对多个字段进行同时查询
//es默认返回10条记录,可以用from(偏移量)和size(pagesize)进行分页
$params = [
    'index' => 'goods',
    'body'  => [
        'query' => [
            'term' => [
//            'match' => [
                'title' => '懒虫天鹅'
            ]
        ]
    ],
    'from' => 0, //分页的位置
    'size' => 20 //返回多少条
];

$response = $client->search($params)->asArray();

模糊查询之wildcard、前缀查询

$params = [
    'index' => 'goods',
    'body'  => [
        'query' => [
        //wildcard会对查询条件进行分词,后面可以接* ? 通配符进行匹配
        // prefix前缀匹配,匹配到分词中以设置的关键词开头的分词
//            'wildcard' => [
            'prefix' => [
                'brand' => '星'
            ]
        ]
    ],
    'from' => 0,
    'size' => 20
];

范围查询

$params = [
    'index' => 'goods',
    'body'  => [
        'query' => [
            'range' => [
                'sort' => [
                    'gte' => 10,
                    'lte' => 100,
                ]
            ]
        ]
    ],
    'from' => 0,
    'size' => 20
];

bool查询

//bool查询,多个条件共同成立,有四种选择,must(计算得分,性能较低) filter(过滤条件,不计算得分,性能高),must_not(条件必须不成立),should(条件可以成立)

//查询title包含懒虫且brand中含有华为的文档记录
$params = [
    'index' => 'goods',
    'body'  => [
        'query'=>[
            'bool' => [
                'filter' => [
                    //多个筛选条件时,每个term是数组形式
                    ['term' => ['title' => '懒虫',]],
                    ['term' => ['brand' =>'华为',]]
                ]
            ]
        ]
    ],
    'from' => 0,
    'size' => 30
];

多个字段不同关键词查询的并集操作

$params = [
    'index' => 'goods',
    'body'  => [
        'query'=>[
        	//查询title包含懒虫或者brand包含华为的文档记录
            'dis_max' => [
                'queries' => [
                    //多个筛选条件时,每个term是数组形式
                    ['term' => ['title' => '懒虫',]],
                    ['term' => ['brand' =>'华为',]]
                ]
            ]
        ],
        //对结果进行聚合操作
        'aggs' => [
            //最大得分的记录,返回的结果字段为max_sort
            'max_sort' => [
                'max' => ['field' => 'sort']
            ],
            //对查询结果按brand进行聚合汇总,取出前size条记录
            'goods_brand_rank' => [
                'terms' => [
                    'field' => 'brand',
                    'size' => 10
                ]
            ]
        ],
        //对结果进行高亮显示
        'highlight' => [
        	//这里定义高亮显示的字段以及高亮显示的tag,前端拿到tag后进行处理
            'fields' => [
                'title' => [
                    'pre_tags' => '<font color="red">',
                    'post_tags' => '</font>',
                ]
            ]
        ]
    ],
    'from' => 0,
    'size' => 30
];

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值