Fecshop 搜索

2018-05-24 14:50 更新

搜索

對于搜索,目前使用了2種方式,對于外文,譬如法語,德語,西班牙語
都是用的mongodb的full Search ,但是mongodb的搜索不支持中文,
目前中文部分用的是xunsearch,對于中小網(wǎng)站都沒啥問題,
后面會(huì)擴(kuò)展用elasticSearch(目前還沒有做)來做搜索工作。

安裝xunsearch

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.xunsearch.com/

https://getyii.com/topic/61

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', # 在搜索頁面?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 : 在搜索頁面?zhèn)葯陲@示的過濾屬性,選擇后在側(cè)欄會(huì)顯示該屬性的過濾選項(xiàng)信息

2.mongodb配置 也就是配置數(shù)組里面 mongoSearch下面的配置。

searchIndexConfig為配置搜索的權(quán)重比, 上面的配置代表為:name的權(quán)重為10,description的權(quán)重為5.

searchLang為語言設(shè)置,因?yàn)樗阉饕婕暗椒衷~,因此要和語言掛鉤的, 對于mongodb的搜索,有一個(gè)語言的文字對應(yīng)表,網(wǎng)址為: https://docs.mongodb.com/manual/reference/text-search-languages/#text-search-languages ,您需要根據(jù)上面語言的名字,在這里配置各個(gè)語言的參數(shù)。譬如:法語配置,fr為語言二位簡碼, 在上面網(wǎng)址中法語的名字為:french, 因此在上面進(jìn)行配置:'fr' => 'french',

3.國產(chǎn)搜索軟件xunSearch

xunSearch作者寫了一個(gè)yii2的擴(kuò)展,用于中文搜索, 因?yàn)閙ongodb是老外的玩意,不支持中文分詞,因此,我用了比較小巧 的xunSearch,(當(dāng)然專業(yè)的搜索工具還是elasticSearch), 關(guān)于語言的配置和上面大致一樣,不過這里只設(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 文件,這里是對search的一些配置, 具體語法可以參看http://www.xunsearch.com/ 查閱,這里不做講解。 當(dāng)然,如果您不想擴(kuò)展fecshop的xunSearch搜索,你可以不需要明白這些,直接用就好。

對于@fecshop/config/xunsearch/search.ini中的配置,我們需要了解的是 project.name = search , 這個(gè)和fecshop\models\xunsearch\Search.php里面的projectName()返回的名字一致即可。

數(shù)據(jù)同步到搜索工具中

通過上面,我們大致就設(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]# 

使用

在前臺就可以使用搜索功能進(jìn)行搜索了。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號