前言
? ? ? ? ElasticSearch是一個(gè)一個(gè)分布式的實(shí)時(shí)文檔存儲,每一個(gè)字段都可以被索引與搜索,并且能支持PB級別的結(jié)構(gòu)化或者非結(jié)構(gòu)化數(shù)據(jù)。早期我們應(yīng)用的全局搜索是簡單的SQL模糊查詢,為了分擔(dān)數(shù)據(jù)庫壓力所以用了ES,選擇他的原因除了以上幾點(diǎn)外,還有其提供的API方式簡單,于任何對接的編程語言都適用。以下將以PHP的業(yè)務(wù)場景完善搜索功能。
環(huán)境
ThinkPHP5.1
ElasticSearch7.8
PHP7.3
功能迭代簡介
? ? ? ? 最開始的ES取代方法解決了搜索速度問題,后來新增的ik分詞器,解決了搜索詞條單一問題。單也正是中文分詞原因,對每句話都是拆解成指定粒度的詞。當(dāng)遇到單詞時(shí),一般只會對一句話里的單詞進(jìn)行拆解,而搜索時(shí)需要輸入某個(gè)字母,希望輸出的是帶字母后面的詞條,也就是模糊查詢。經(jīng)過翻閱文檔,發(fā)現(xiàn)了即時(shí)搜索。
? ? ? ?即時(shí)搜索或輸入即搜索(search-as-you-type),就是當(dāng)用戶習(xí)慣在輸完查詢內(nèi)容之前,就能為他們展現(xiàn)搜索結(jié)果,不僅能在更短的時(shí)間內(nèi)得到搜索結(jié)果,也能引導(dǎo)用戶搜索索引中真實(shí)存在的結(jié)果。例如,輸入 dvd r ,即時(shí)搜索會得到:dvd r9s 和 dvd r9sk等 , 以下將通過完整示例演示效果。
配置索引的映射
? ? ? ? 關(guān)于ElasticSearch環(huán)境搭建和基本操作在前面文章有說明,這里就假裝已經(jīng)創(chuàng)建了索引,以下是索引的映射。還有文檔的添加也是根據(jù)你自己的需求定義了,不管是定時(shí)任務(wù)還是業(yè)務(wù)節(jié)點(diǎn)觸發(fā),亦或是采集工具同步等。
{
"mappings": {
"_doc": {
"properties": {
"class_id": {
"type": "long"
},
"goods_name": {
"type": "text",
"analyzer": "ik_smart"
},
"goods_sort": {
"type": "keyword"
},
"id": {
"type": "keyword"
},
"price": {
"type": "long"
},
"single_goods_name": {
"type": "text",
"analyzer": "ik_max_word"
},
"state": {
"type": "keyword"
},
"v": {
"type": "long"
}
}
}
}
}
前臺搜索
1.? 即搜索示例
{
"match_phrase_prefix" : {
"brand" : {
"query": "walker johnnie bl",
"slop": 10
}
}
}
2. 業(yè)務(wù)代碼
public function queryData($key, $sort, $from = 0, $size = 10)
{
$from = $from * $size;
$indexName = Env::get('elasticsearch.goods_index') ?? 'products';
$params = [
'index' => $indexName,
'client' => [
'timeout' => 10,
'connect_timeout' => 10
],
'body' => [
'from' => $from,
'size' => $size,
'query' => [
'bool' => [
'should' => [
[
'multi_match' => [
'query' => $key,
'fields' => [
'goods_name^2',
'single_goods_name'
],
],
],
[
'wildcard' => [
'single_goods_name' => "$key*"
]
],
[
'fuzzy' => [
'single_goods_name' => [
'value' => $key
]
]
],
[
'match_phrase_prefix' => [
'single_goods_name' => "$key"
]
],
],
],
],
'sort' => [
['_score' => "desc"],
['goods_sort' => 'desc']
],
]
];
return $this->es->search($params);
}
3. 效果演示文章來源:http://www.zghlxwxcb.cn/news/detail-770340.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-770340.html
到了這里,關(guān)于ElasticSearch中文分詞和模糊查詢的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!