Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
indows作為市場(chǎng)占有率最高的PC操作系統(tǒng),它有著難以計(jì)數(shù)的桌面應(yīng)用,搜索類工具自然不在話下,
?Everything
?Listary
?Wox
但是,這些工具無(wú)一例外,都只能用于文件名的搜索,卻不能搜索文件的文本內(nèi)容。
我們不得不承認(rèn)一個(gè)事實(shí),搜索文本內(nèi)容是我們?nèi)粘9ぷ骱蛯W(xué)習(xí)中非常常見(jiàn)的一個(gè)應(yīng)用場(chǎng)景。
例如,當(dāng)你寫了半天的文檔,隨手保存之后不知道放在哪里,你只記得其中片段的內(nèi)容,你可以通過(guò)記憶力僅存的片段去搜索文件所在位置。
例如,當(dāng)你開(kāi)發(fā)了一個(gè)龐大的工程,里面涉及幾十個(gè)代碼文件,你想知道有哪些文件中調(diào)用了某個(gè)庫(kù),或者帶有你事先留下的標(biāo)記,你可以通過(guò)字符串搜索的方式找到相應(yīng)的文件。
...
或許,一時(shí)之間無(wú)法想起,到底還有哪些場(chǎng)景會(huì)有這樣的需求。但是,總會(huì)在某一個(gè)時(shí)候遇到這種需求的時(shí)候卻無(wú)從下手。
本文即將介紹的這款A(yù)nyTXT就可以有效的解決這樣一個(gè)難題,讓你的桌面擁有谷歌搜索引擎一樣的功能。
AnyTXT
AnyTXT搜索引擎是一個(gè)強(qiáng)大的本地?cái)?shù)據(jù)全文搜索引擎,它之于PC桌面,就如同谷歌搜索引擎之于Web一樣,讓我們?cè)诙虝旱臅r(shí)間內(nèi),搜索到系統(tǒng)內(nèi)想要的內(nèi)容。
AnyTXT Searcher內(nèi)置了強(qiáng)大的文檔解析引擎,可以在不安裝任何其他軟件的情況下解析常用文檔的文本,并結(jié)合內(nèi)置的高速索引系統(tǒng)來(lái)存儲(chǔ)文本的元數(shù)據(jù)。
因此,在使用AnyTXT的時(shí)候,它會(huì)花費(fèi)幾十秒時(shí)間進(jìn)行初始化,隨后你就可以快速的搜索自己想要的內(nèi)容。這樣是它對(duì)比于其他類似軟件的優(yōu)勢(shì)所在,雖然此類應(yīng)用有很多,但是大多是是邊搜索、邊解析,這樣搜索效率極其低下。
使用AnyTXT搜索器,您可以快速找到計(jì)算機(jī)上存在的任何包含指定字符串的文件。
AnyTXT不僅在功能方面非常優(yōu)秀,它在系統(tǒng)支持方面也非常全面,它支持Windows10、8、7、XP、Vista等版本的操作系統(tǒng)。
如同前面提到的那樣,AnyTXT之所以能夠用于文件全文搜索,是由于它可以解析本地的文件內(nèi)容,因此,它首先需要具備支持文件格式豐富這項(xiàng)特點(diǎn)。
在文件格式支持方面,AnyTXT支持如下格式,
?普通格式:txt、cpp、html等.
?郵件:Microsoft Outlook.
?Office:Word、PPT、Excel.
?電子書:epub、mobi
可以看出,AnyTXT不僅支持PDF、Word、Excel、PPT這些日常工作和學(xué)習(xí)中經(jīng)常接觸到的文件格式,還可以搜索cpp、html、py這些偏專業(yè)性的編碼文件,可以說(shuō)在文件覆蓋方面非常全面。
除了支持文件格式全面、豐富之外,它在其他方面做得也非常值得稱贊,例如,
?速度快:由于它事先解析本地文件并建立本地服務(wù)器,所以搜索速度非常迅速。
?高亮顯示:可以高亮顯示搜索結(jié)果,便于識(shí)別我么想要的內(nèi)容。
?易于使用:安裝和使用都非常簡(jiǎn)單,不需要配置額外的引擎或者輔助工具。
?隱私保護(hù):整個(gè)索引和所有數(shù)據(jù)存儲(chǔ)在本地服務(wù)器上,所有數(shù)據(jù)均采用AES256高強(qiáng)度加密算法,確保數(shù)據(jù)安全。
?免費(fèi):AnyTXT完全免費(fèi)使用
者:HelloGitHub-追夢(mèng)人物
搜索是一個(gè)復(fù)雜的功能,但對(duì)于一些簡(jiǎn)單的搜索任務(wù),我們可以使用 Django Model 層提供的一些內(nèi)置方法來(lái)完成?,F(xiàn)在我們來(lái)為我們的博客提供一個(gè)簡(jiǎn)單的搜索功能。
博客文章通常包含標(biāo)題和正文兩個(gè)部分。當(dāng)用戶輸入某個(gè)關(guān)鍵詞進(jìn)行搜索后,我們希望為用戶顯示標(biāo)題和正文中含有被搜索關(guān)鍵詞的全部文章。整個(gè)搜索的過(guò)程如下:
整個(gè)過(guò)程就是這樣,下面來(lái)看看 Django 如何用實(shí)現(xiàn)這些過(guò)程。
先來(lái)回顧一下我們的 Django 博客的 Post(文章)模型:
blog/models.py
class Post(models.Model):
# 標(biāo)題
title = models.CharField("標(biāo)題", max_length=70)
# 正文
body = models.TextField("正文")
# 其他屬性...
def __str__(self):
return self.title
先看到第 1 步,用戶在搜索框輸入搜索關(guān)鍵詞,因此我們要在博客上為用戶提供一個(gè)搜索表單,HTML 表單代碼大概像這樣:
templates/base.html
<form role="search" method="get" id="searchform" action="{% url 'blog:search' %}">
<input type="search" name="q" placeholder="搜索" required>
<button type="submit"><span class="ion-ios-search-strong"></span></button>
</form>
特別注意這里 <input type="search" name="q" placeholder="搜索" required> 中的 name 屬性,當(dāng)用戶在這個(gè) input 中輸入搜索內(nèi)容并提交表單后,鍵入的數(shù)據(jù)會(huì)以鍵值對(duì)的形式提交服務(wù)器,這個(gè)鍵的名字就是通過(guò) name 屬性指定的。這樣服務(wù)器就可以根據(jù) name 的值來(lái)取得用戶輸入的內(nèi)容。
用戶輸入了搜索關(guān)鍵詞并點(diǎn)擊了搜索按鈕后,數(shù)據(jù)就被發(fā)送給了 Django 后臺(tái)服務(wù)器。表單的 action 屬性的值為 {% url 'blog:search' %}(雖然我們還沒(méi)有寫這個(gè)視圖函數(shù)),表明用戶提交的結(jié)果將被發(fā)送給 blog 應(yīng)用下 search 視圖函數(shù)對(duì)應(yīng)的 URL。
搜索的功能將由 search 視圖函數(shù)提供,代碼寫在 blog/views.py 里:
blog/views.py
from django.contrib import messages
def search(request):
q = request.GET.get('q')
if not q:
error_msg = "請(qǐng)輸入搜索關(guān)鍵詞"
messages.add_message(request, messages.ERROR, error_msg, extra_tags='danger')
return redirect('blog:index')
post_list = Post.objects.filter(Q(title__icontains=q) | Q(body__icontains=q))
return render(request, 'blog/index.html', {'post_list': post_list})
首先我們使用 request.GET.get('q') 獲取到用戶提交的搜索關(guān)鍵詞。用戶通過(guò)表單 get 方法提交的數(shù)據(jù) Django 為我們保存在 request.GET 里,這是一個(gè)類似于 Python 字典的對(duì)象,所以我們使用 get 方法從字典里取出鍵 q 對(duì)應(yīng)的值,即用戶的搜索關(guān)鍵詞。這里字典的鍵之所以叫 q 是因?yàn)槲覀兊谋韱沃兴阉骺?input 的 name 屬性的值是 q,如果修改了 name 屬性的值,那么這個(gè)鍵的名稱也要相應(yīng)修改。
接下來(lái)我們做了一個(gè)小小的校驗(yàn),如果用戶沒(méi)有輸入搜索關(guān)鍵詞而提交了表單,我們就無(wú)需執(zhí)行查詢,我們給給用戶發(fā)一條錯(cuò)誤提醒消息,這里使用了 django messages 應(yīng)用,這在 交流的橋梁:評(píng)論功能中講過(guò)。然后將用戶重定向到首頁(yè)。這里的 redirect 函數(shù)也在那篇教程中講過(guò)。
如果用戶輸入了搜索關(guān)鍵詞,我們就通過(guò) filter 方法從數(shù)據(jù)庫(kù)里過(guò)濾出符合條件的所有文章。這里的過(guò)濾條件是 title__icontains=q,即 title 中包含(contains)關(guān)鍵字 q,前綴 i 表示不區(qū)分大小寫。這里 icontains 是查詢表達(dá)式(Field lookups),我們?cè)谥耙彩褂眠^(guò)其他類似的查詢表達(dá)式,其用法是在模型需要篩選的屬性后面跟上兩個(gè)下劃線。Django 內(nèi)置了很多查詢表達(dá)式,建議過(guò)一遍 Django 官方留個(gè)印象,了解每個(gè)表達(dá)式的作用,以后碰到相關(guān)的需求就可以快速定位到文檔查詢其用途 Field lookups。
此外我們這里從 from django.db.models 中引入了一個(gè)新的東西:Q 對(duì)象。Q 對(duì)象用于包裝查詢表達(dá)式,其作用是為了提供復(fù)雜的查詢邏輯。例如這里 Q(title__icontains=q) | Q(body__icontains=q) 表示標(biāo)題(title)含有關(guān)鍵詞 q 或者正文(body)含有關(guān)鍵詞 q ,或邏輯使用 | 符號(hào)。如果不用 Q 對(duì)象,就只能寫成 title__icontains=q, body__icontains=q,這就變成標(biāo)題(title)含有關(guān)鍵詞 q 且正文(body)含有關(guān)鍵詞 q,就達(dá)不到我們想要的目的。
有了視圖函數(shù)后記得把視圖函數(shù)映射到相應(yīng)了 URL,如下。
blog/urls.py
urlpatterns = [
# 其他 url 配置
path('search/', views.search, name='search'),
]
大功告成,在導(dǎo)航欄嘗試輸入一些關(guān)鍵詞,看看效果吧!
當(dāng)然這樣的搜索功能是非常簡(jiǎn)略的,難以滿足一些復(fù)雜的搜索需求。編寫一個(gè)搜索引擎是一個(gè)大工程,好在 django-haystack 這款第三方 app 為我們完成了全部工作。使用它我們可以實(shí)現(xiàn)更加復(fù)雜的搜索功能,比如全文檢索、按搜索相關(guān)度排序、關(guān)鍵字高亮等等類似于百度搜索的功能,功能十分強(qiáng)大。當(dāng)然其使用也會(huì)復(fù)雜一些,下一篇教程將向大家介紹 django-haystack 結(jié)合 Elasticsearch 搜索引擎的使用方法。
『講解開(kāi)源項(xiàng)目系列』——讓對(duì)開(kāi)源項(xiàng)目感興趣的人不再畏懼、讓開(kāi)源項(xiàng)目的發(fā)起者不再孤單。跟著我們的文章,你會(huì)發(fā)現(xiàn)編程的樂(lè)趣、使用和發(fā)現(xiàn)參與開(kāi)源項(xiàng)目如此簡(jiǎn)單。歡迎留言聯(lián)系我們、加入我們,讓更多人愛(ài)上開(kāi)源、貢獻(xiàn)開(kāi)源
添加搜素框或網(wǎng)站搜索功能是為了方便用戶能夠輕松、快捷地找到自己需要的信息。因此,在網(wǎng)站中添加一個(gè)搜索框已經(jīng)成為網(wǎng)頁(yè)設(shè)計(jì)的主流元素之一。添加一個(gè)搜索框到網(wǎng)站會(huì)使得用戶界面更加友好,也能幫助用戶輕松愉快地瀏覽。
下面,小編收集了13個(gè)有用的CSS3,HTML5和jQuery搜索表單腳本來(lái)幫助大家從頭開(kāi)始創(chuàng)建一個(gè)搜索框。希望能夠幫助到大家,讓我們一起來(lái)看看吧!
輸入搜索框帶有邊框和類似脈沖的陰影跳動(dòng)。
這是一個(gè)使用純CSS構(gòu)建擴(kuò)展建議搜索框的簡(jiǎn)單教程。
擴(kuò)大搜索框是一個(gè)點(diǎn)擊或輸入東西時(shí)會(huì)變寬的一個(gè)簡(jiǎn)單搜索框。
我們將利用CSS轉(zhuǎn)換擴(kuò)展了的搜索欄。搜索欄最初在視圖中隱藏的,當(dāng)點(diǎn)擊搜索標(biāo)簽時(shí)它能順利地?cái)U(kuò)展到視圖。
使用指數(shù)化數(shù)據(jù)屬性、動(dòng)態(tài)樣式和CSS3選擇器的搜索功能,可以直接實(shí)現(xiàn)在CSS的全文檢索,而不是JavaScript客戶端。
在本教程中,我們將創(chuàng)建一個(gè)平面式的導(dǎo)航和Square UI的搜索下拉菜單。
在本教程中我們使用兩種不同的方法來(lái)構(gòu)建一個(gè)擴(kuò)大搜索字段。
這是一個(gè)奇特的搜索框,非常有意思!
一種提示選擇搜索,像商店類別的搜索框。
一個(gè)靈活的搜索輸入和內(nèi)部固定寬度的提交按鈕來(lái)固定邊界的寬度。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。