php – 弹性搜索模糊匹配,首先显示精确匹配
发布时间:2020-12-13 17:30:54 所属栏目:PHP教程 来源:网络整理
导读:我想在查询上使用模糊匹配,但在结果的顶部显示完全匹配. 我尝试了以下内容. $return = $this-_client-search( array( 'index' = self::INDEX,'type' = self::TYPE,'body' = array( 'query' = array( 'bool' = array( 'must' = array( 'multi_match' = array(
我想在查询上使用模糊匹配,但在结果的顶部显示完全匹配.
我尝试了以下内容. $return = $this->_client->search( array( 'index' => self::INDEX,'type' => self::TYPE,'body' => array( 'query' => array( 'bool' => array( 'must' => array( 'multi_match' => array( 'query' => $query,'fields' => array('name','brand','description'),'boost' => 10,),'fuzzy_like_this' => array( 'like_text' => $query,'fuzziness' => 1,'size' => '5000',) ); 由于格式错误的查询错误,这不起作用. 有任何想法吗? 解决方法
我最终没有使用模糊匹配来解决我的问题,而是使用了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','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,'body' => array( 'query' => array( 'multi_match' => array( 'query' => $query,'fields' => array('id','name','description','barcodes'),) ); $productIds = array(); if (!empty($return['hits']['hits'])) { foreach ($return['hits']['hits'] as $hit) { $productIds[] = $hit['_id']; } } return $productIds; } 结果正是我所寻找的.它根据搜索查询中包含的ngram部分构造匹配. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |