Elasticsearch-PHP

官方文档:https://www.elastic.co/guide/cn/elasticsearch/php/current/_search_operations.html

1、一个简单的匹配语法(match):

match匹配,如果检索内容是:

满足字段httpRefer为"aaa/bbb"的内容

类似于"aaa/bbb",则会由于默认的mapping会进行分词,会匹配到包含"aaa" 或者包含“bbb”的内容,不能完全匹配

$query['bool']['must'][]['match'] = array(
                'httpRefer' => "aaa/bbb"
            );

// 官方示例;
$params = [
    'index' => 'my_index',
    'type' => 'my_type',
    'body' => [
        'query' => [
            'match' => [
                'testField' => 'abc'
            ]
        ]
    ]
];

$results = $client->search($params);

2、解决上述问题进行严格匹配(match_phrase)

$params = [
    'index' => 'my_index',
    'type' => 'my_type',
    'query' => [
            'match_phrase' => [
                'testField' => 'abc'
            ]
        ]
];

$results = $client->search($params);

3、完全匹配(match_phrase)有个缺陷,不能使用should进行多字段匹配(即同时满足多个条件)

一旦使用了should,匹配结果则不再精确,仍然是有个分数级别控制的结果

如下方代码,匹配的结果就不是完全满足条件的

foreach ($uris as $uri) {
                $query['bool']['should'][]['match_phrase'] = array(
                    'httpRefer' => $uri
                );
            }

4、过滤语法(filter)

对字段logTime进行过滤,gte是greaterthanequal 大于等于;lte小于等于;

$query['bool']['filter']['range']['logTime'] = array(
                'gte' => $filters['startTime'],
                'lte' => $filters['endTime']
            );

5、对返回结果判断字段是否存在进行筛选(exists)

意思是:字段为uname必须存在

 $query['bool']['must'][]['exists'] = array(
            "field" => "uname"
        );

6、其他检索语法见es官网,均可用

组合查询:must、must_not、should

多字符串查询:should match

多个字段匹配同一个值:multi_match

短语精确匹配:match_phrase

可调整精确程度:slop、minimum_should_match

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值