對(duì)于搜索,目前使用了2種方式,對(duì)于外文,譬如法語(yǔ),德語(yǔ),西班牙語(yǔ)
都是用的mongodb的full Search ,但是mongodb的搜索不支持中文,
目前中文部分用的是xunsearch,對(duì)于中小網(wǎng)站都沒啥問題,
后面會(huì)擴(kuò)展用elasticSearch(目前還沒有做)來做搜索工作。
http://www.fancyecommerce.com/2016/09/24/xunsearch-%e5%ae%89%e8%a3%85%ef%bc%8c%e4%bd%bf%e7%94%a8/
其他參考資料:
http://www.yiichina.com/code/661
配置文件為:
fecshop的配置文件路徑為: @fecshop/config/services/Search.php
用戶可以在@common/config/fecshop_local_services/Search.php
這里進(jìn)行重寫配置。
完整的配置如下:
return [
'search' => [
'class' => 'fecshop\services\Search',
'filterAttr' => [
'color','size', # 在搜索頁(yè)面?zhèn)葯诘乃阉鬟^濾屬性字段
],
'childService' => [
'mongoSearch' => [
'class' => 'fecshop\services\search\MongoSearch',
'searchIndexConfig' => [
'name' => 10,
'description' => 5,
],
#more : https://docs.mongodb.com/manual/reference/text-search-languages/#text-search-languages
'searchLang' => [
'en' => 'english',
'fr' => 'french',
'de' => 'german',
'es' => 'spanish',
'ru' => 'russian',
'pt' => 'portuguese',
],
],
'xunSearch' => [
'class' => 'fecshop\services\search\XunSearch',
'fuzzy' => true, # 是否開啟模糊查詢
'synonyms' => true, #是否開啟同義詞翻譯
'searchLang' => [
'zh' => 'chinese',
],
],
],
]
];
1.側(cè)欄屬性過濾
filterAttr
: 在搜索頁(yè)面?zhèn)葯陲@示的過濾屬性,選擇后在側(cè)欄會(huì)顯示該屬性的過濾選項(xiàng)信息
2.mongodb配置 也就是配置數(shù)組里面 mongoSearch
下面的配置。
searchIndexConfig
為配置搜索的權(quán)重比,
上面的配置代表為:name
的權(quán)重為10,description
的權(quán)重為5.
searchLang
為語(yǔ)言設(shè)置,因?yàn)樗阉饕婕暗椒衷~,因此要和語(yǔ)言掛鉤的,
對(duì)于mongodb的搜索,有一個(gè)語(yǔ)言的文字對(duì)應(yīng)表,網(wǎng)址為:
https://docs.mongodb.com/manual/reference/text-search-languages/#text-search-languages
,您需要根據(jù)上面語(yǔ)言的名字,在這里配置各個(gè)語(yǔ)言的參數(shù)。譬如:法語(yǔ)配置,fr
為語(yǔ)言二位簡(jiǎn)碼,
在上面網(wǎng)址中法語(yǔ)的名字為:french
,
因此在上面進(jìn)行配置:'fr' => 'french'
,
3.國(guó)產(chǎn)搜索軟件xunSearch
xunSearch作者寫了一個(gè)yii2的擴(kuò)展,用于中文搜索,
因?yàn)閙ongodb是老外的玩意,不支持中文分詞,因此,我用了比較小巧
的xunSearch
,(當(dāng)然專業(yè)的搜索工具還是elasticSearch
),
關(guān)于語(yǔ)言的配置和上面大致一樣,不過這里只設(shè)置中文就好了,如果您是
外貿(mào)網(wǎng)站,那么根本不需要使用xunsearch啦。
xunSearch配置組件
:組件的配置文件:fecshop/config/components/XunSearch.php
,
打開這個(gè)文件,你會(huì)發(fā)現(xiàn):'iniDirectory' => '@fecshop/config/xunsearch'
,
也就是active record的配置,有點(diǎn)類似elasticSearch的mapping
,
也就是數(shù)據(jù)model的配置文件的文件夾路徑,我們進(jìn)入@fecshop/config/xunsearch,
發(fā)現(xiàn)下面有search.ini文件,我們打開
@fecshop/config/xunsearch/search.ini
文件,這里是對(duì)search的一些配置,
具體語(yǔ)法可以參看http://www.xunsearch.com/ 查閱,這里不做講解。
當(dāng)然,如果您不想擴(kuò)展fecshop的xunSearch搜索,你可以不需要明白這些,直接用就好。
對(duì)于@fecshop/config/xunsearch/search.ini
中的配置,我們需要了解的是
project.name = search
, 這個(gè)和fecshop\models\xunsearch\Search.php
里面的projectName()
返回的名字一致即可。
通過上面,我們大致就設(shè)置完了,然后我們需要跑初始化腳本, 也就是將數(shù)據(jù)同步到我們的搜索工具中,需要跑的腳本為: 首先shell進(jìn)入路徑 @fecshop/shell/search , 然后執(zhí)行 sh fullSearchSync.sh 即可,跑完后,mongodb的搜索和xunSearch的搜索都把數(shù)據(jù)同步過去。
[root@iZ942k2d5ezZ search]# pwd
/www/web/develop/fecshop/vendor/fancyecommerce/fecshop/shell/search
[root@iZ942k2d5ezZ search]# sh fullSearchSync.sh
There are 37 products to process
There are 1 pages to process
##############ALL BEGINING###############
Page 1 done
begin delete Mongodb Search Date
##############ALL COMPLETE###############
[root@iZ942k2d5ezZ search]#
在前臺(tái)就可以使用搜索功能進(jìn)行搜索了。
更多建議: