php 模糊匹配_php – 弹性搜索模糊匹配,首先显示精确匹配

我最终没有使用模糊匹配来解决我的问题,而是使用了ngram的.

/**

* Map - Create a new index with property mapping

*/

public function map()

{

$params['index'] = self::INDEX;

$params['body']['settings'] = array(

'index' => array(

'analysis' => array(

'analyzer' => array(

'product_analyzer' => array(

'type' => 'custom',

'tokenizer' => 'whitespace',

'filter' => array('lowercase', 'product_ngram'),

),

),

'filter' => array(

'product_ngram' => array(

'type' => 'nGram',

'min_gram' => 3,

'max_gram' => 5,

),

)

),

)

);

//all the beans

$mapping = array(

'_source' => array(

'enabled' => true

),

'properties' => array(

'id' => array(

'type' => 'string',

),

'name' => array(

'type' => 'string',

'analyzer' => 'product_analyzer',

'boost' => '10',

),

'brand' => array(

'type' => 'string',

'analyzer' => 'product_analyzer',

'boost' => '5',

),

'description' => array(

'type' => 'string',

),

'barcodes' => array(

'type' => 'string'

),

),

);

$params['body']['mappings'][self::TYPE] = $mapping;

$this->_client->indices()->create($params);

}

public function search($query)

{

$return = $this->_client->search(

array(

'index' => self::INDEX,

'type' => self::TYPE,

'body' => array(

'query' => array(

'multi_match' => array(

'query' => $query,

'fields' => array('id', 'name', 'brand', 'description', 'barcodes'),

),

),

'size' => '5000',

),

)

);

$productIds = array();

if (!empty($return['hits']['hits'])) {

foreach ($return['hits']['hits'] as $hit) {

$productIds[] = $hit['_id'];

}

}

return $productIds;

}

结果正是我所寻找的.它根据搜索查询中包含的ngram部分构造匹配.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值