最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

10分鐘用Python快速搭建全文搜索引擎詳解流程

 更新時間:2021年10月28日 15:33:09   作者:Monster_起飛  
讀萬卷書不如行萬里路,只學(xué)書上的理論是遠遠不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章帶你用python花10分鐘迅速搭建一個好玩的Python全文搜索引擎,大家可以在過程中查缺補漏,提升水平

有一個群友在群里問個如何快速搭建一個搜索引擎,在搜索之后我看到了這個

在這里插入圖片描述

代碼所在

官方很貼心,很方便的是已經(jīng)提供了docker 鏡像,基本pull下來就可以很方便的使用了,執(zhí)行命令

cid=$(sudo docker ps -a | grep searx | awk '{print $1}')  
echo searx  cid is $cid  
if [ "$cid" != "" ];then  
    sudo docker stop $cid  
    sudo docker rm $cid  
fi 
sudo docker run -d --name searx -e IMAGE_PROXY=True -e BASE_URL=http://yourdomain.com  -p 7777:8888 wonderfall/searx

然后就可以使用了,正常查看docker的狀態(tài),就可以正常的使用了

思考

怎么樣,是不是很方便,我們先看看源碼是怎么樣實現(xiàn)的

在這里插入圖片描述


我們打開里面的代碼,其實本質(zhì)就是將request之后的結(jié)果做一個大的聚合,至于數(shù)據(jù)來源,我們可以是來于DB,或者文件,我們可以看一下他的核心代碼

from urllib import urlencode  
from json import loads  
from collections import Iterable  
search_url = None  
url_query = None  
content_query = None  
title_query = None  
suggestion_query = ''  
results_query = ''  
# parameters for engines with paging support  
#  
# number of results on each page  
# (only needed if the site requires not a page number, but an offset)  
page_size = 1 
# number of the first page (usually 0 or 1)  
first_page_num = 1  
def iterate(iterable):  
    if type(iterable) == dict:  
        it = iterable.iteritems()  
    else:  
        it = enumerate(iterable)  
    for index, value in it:  
        yield str(index), value 
def is_iterable(obj):  
    if type(obj) == str:  
        return False  
    if type(obj) == unicode: 
        return False  
    return isinstance(obj, Iterable)  
def parse(query): 
    q = []  
    for part in query.split('/'):  
        if part == '':  
            continue  
        else:  
            q.append(part)  
    return q  
def do_query(data, q):  
    ret = []  
    if not q:  
        return ret  
    qqkey = q[0]  
    for key, value in iterate(data):  
        if len(q) == 1:  
            if key == qkey:  
                ret.append(value)  
            elif is_iterable(value):  
                ret.extend(do_query(value, q))  
        else:  
            if not is_iterable(value):  
                continue  
            if key == qkey:  
                ret.extend(do_query(value, q[1:]))  
            else:  
                ret.extend(do_query(value, q))  
    return ret  
def query(data, query_string): 
    q = parse(query_string)  
    return do_query(data, q)  
def request(query, params):  
    query = urlencode({'q': query})[2:]  
    fp = {'query': query}  
    if paging and search_url.find('{pageno}') >= 0:  
        fp['pageno'] = (params['pageno'] - 1) * page_size + first_page_num  
    params['url'] = search_url.format(**fp)  
    params['query'] = query  
    return params  
def response(resp):  
    results = []  
    json = loads(resp.text)  
    if results_query:  
        for result in query(json, results_query)[0]:  
            url = query(result, url_query)[0]  
            title = query(result, title_query)[0]  
            content = query(result, content_query)[0]  
            results.append({'url': url, 'title': title, 'content': content})  
    else: 
         for url, title, content in zip(  
            query(json, url_query),  
            query(json, title_query),  
            query(json, content_query)  
        ):  
            results.append({'url': url, 'title': title, 'content': content}) 
    if not suggestion_query:  
        return results 
     for suggestion in query(json, suggestion_query):  
        results.append({'suggestion': suggestion})  
    return results 

結(jié)果

每個response的時候我們都要以輕松的定制返回的數(shù)據(jù)(可以是網(wǎng)絡(luò),可以是數(shù)據(jù)庫,可以是文件),那我們進一步想一下,如果我們可以hack response 結(jié)果,那我們完全可以將自己爬來的數(shù)據(jù)做為返回結(jié)果。如果是1024之類的,完全可以打造自己的“愛好”小引擎,代碼我就不貼了,大家可以自己動手自己玩玩。結(jié)合jieba分詞,可以更好玩一點。

到此這篇關(guān)于10分鐘用Python快速搭建全文搜索引擎詳解流程的文章就介紹到這了,更多相關(guān)Python 搜索引擎內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 將Python應(yīng)用部署到生產(chǎn)環(huán)境的小技巧分享

    將Python應(yīng)用部署到生產(chǎn)環(huán)境的小技巧分享

    文章主要講述了在將Python應(yīng)用程序部署到生產(chǎn)環(huán)境之前,需要進行的準(zhǔn)備工作和最佳實踐,包括心態(tài)調(diào)整、代碼審查、測試覆蓋率提升、配置文件優(yōu)化、日志記錄完善、文檔更新、環(huán)境搭建、自動化流水線、性能調(diào)優(yōu)、監(jiān)控與告警、安全加固以及故障恢復(fù)
    2025-01-01
  • Python訪問MySQL封裝的常用類實例

    Python訪問MySQL封裝的常用類實例

    這篇文章主要介紹了Python訪問MySQL封裝的常用類,實例詳述了針對MySQL使用query執(zhí)行select及使用update進行insert、delete等操作的方法,需要的朋友可以參考下
    2014-11-11
  • Python算法繪制特洛伊小行星群實現(xiàn)示例

    Python算法繪制特洛伊小行星群實現(xiàn)示例

    這篇文章主要介紹了Python算法繪制特洛伊小行星群實現(xiàn)示例,這個小示例完成后非常的有意思也會使你在Python學(xué)習(xí)的道路上感到一絲絲小成就
    2021-10-10
  • Python中的集合類型知識講解

    Python中的集合類型知識講解

    這篇文章主要介紹了Python中的集合類型知識講解,是Python入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-08-08
  • Python簡單讀取json文件功能示例

    Python簡單讀取json文件功能示例

    這篇文章主要介紹了Python簡單讀取json文件功能,結(jié)合實例形式分析了Python文件讀取及json格式數(shù)據(jù)相關(guān)操作技巧,需要的朋友可以參考下
    2017-11-11
  • 用python畫城市輪播地圖

    用python畫城市輪播地圖

    輪播地圖可以在很多方面有實際應(yīng)用,所以就介紹給大家,并給出個實際操作案例,感興趣的朋友可以參考下
    2021-05-05
  • 在CentOS6上安裝Python2.7的解決方法

    在CentOS6上安裝Python2.7的解決方法

    在CentOS6上yum安裝工具是基于Python2.6.6的,所以在CentOS6上默認(rèn)安裝的是Python2.6.6,因為要在服務(wù)器系統(tǒng)為CentOS6上部署生產(chǎn)環(huán)境,但是代碼都是基于Python2.7寫的,所有遇到了問題,下面通過本文給大家介紹下在CentOS6上安裝Python2.7的解決方法,一起看看吧
    2018-01-01
  • 詳解如何創(chuàng)建Python元類

    詳解如何創(chuàng)建Python元類

    通過本文,將深入討論Python元類,其屬性,如何以及何時在Python中使用元類。
    2021-05-05
  • django框架中間件原理與用法詳解

    django框架中間件原理與用法詳解

    這篇文章主要介紹了django框架中間件原理與用法,結(jié)合實例形式詳細分析了Django框架常用中間件與基本使用技巧,需要的朋友可以參考下
    2019-12-12
  • python實現(xiàn)隨機梯度下降法

    python實現(xiàn)隨機梯度下降法

    這篇文章主要為大家詳細介紹了python實現(xiàn)隨機梯度下降法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08

最新評論

辽中县| 阳山县| 宁河县| 锦州市| 环江| 穆棱市| 斗六市| 安乡县| 张家港市| 香港 | 康定县| 四子王旗| 玛纳斯县| 黑龙江省| 来宾市| 中西区| 阿鲁科尔沁旗| 东丰县| 新郑市| 郴州市| 望谟县| 英超| 额尔古纳市| 三河市| 合肥市| 镇平县| 宁乡县| 霞浦县| 芦山县| 辛集市| 乐昌市| 英德市| 太谷县| 航空| 雷波县| 甘洛县| 奉节县| 老河口市| 方城县| 岑巩县| 枣庄市|