聚合搜索源碼(全網(wǎng)搜索源碼)
今天給各位分享聚合搜索源碼的知識,其中也會對全網(wǎng)搜索源碼進行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關注本站,現(xiàn)在開始吧!
本文目錄一覽:
- 1、114la網(wǎng)址導航和丫頭網(wǎng)址導航為什么一樣
- 2、visualstudio2012計算代碼?
- 3、什么叫長尾關鍵詞?
- 4、如何用 Node.js 和 Elasticsearch 構建搜索引擎
114la網(wǎng)址導航和丫頭網(wǎng)址導航為什么一樣
丫頭網(wǎng)址導航,使用的正是我們的源碼!
114啦網(wǎng)址導航是目前國內使用率最高的網(wǎng)址導航之一,為了答謝一直以來支持和喜歡本站的站長朋友,同時也是為了傳遞互聯(lián)網(wǎng)的分享精神,2009年6月27日,雨林木風旗下114啦網(wǎng)址導航發(fā)布了其自主研發(fā)的《114啦網(wǎng)址導航建站系統(tǒng)》源碼。114啦網(wǎng)址導航開源將幫助更多站長輕松搭建網(wǎng)址導航網(wǎng)站,讓更多的網(wǎng)民得到優(yōu)秀的網(wǎng)址導航服務。此外,本站還將適時發(fā)布新版本和更新數(shù)據(jù)庫,并將適時發(fā)布專為網(wǎng)址導航定制的各類插件。
114啦網(wǎng)址導航建站系統(tǒng)V1.13是從V1.12版本改進而來,通過對1.12版本站長反饋的bug修復,并對程序進行了整體優(yōu)化,增強程序兼容性,提高了運行效率;本次版本的重大改進還有增加了在線升級功能,站長可以及時在線修復bug,并能得到官方的最新消息;對模板引擎進行了重構,并提供了多個模版,真正方便站長進行模板制作,我們也將不定時制作作新模版發(fā)布;改善了網(wǎng)址導航的網(wǎng)址分類和網(wǎng)址管理方式,能最高效的管理站點;支持直接貼入搜索聯(lián)盟代碼等……本程序從建站始到站點更新維護力求貼近草根站長需求。
歡迎各位站長升級使用。由于測試環(huán)境有限,可能會出現(xiàn)一些bug,也請您及時反饋(Bug收集貼),我們將及時修復,并通過在線更新系統(tǒng)發(fā)布程序補丁包。雨林木風竭誠為廣大站長服務!
114啦網(wǎng)址導航建站系統(tǒng)主要特性:
采用Php+Mysql架構,搭建簡易,程序運行穩(wěn)定安全
集成114啦網(wǎng)址導航最新數(shù)據(jù)庫,收錄站點質量高
全站可見鏈接99%后臺控制,站長可隨心所欲定制
全站采用XHTML+CSS設計,符合W3C標準
一鍵全站html靜態(tài)頁生成,可完全脫離數(shù)據(jù)庫運行
功能強大的多用戶權限管理,可委任多個權限組進行站點維護
分類清晰人性化,可自定義分類鏈接、可外鏈,更符合seo標準
全站鏈接可設置上線時間、過期時間、顏色定制、留空、網(wǎng)站備注等,方便廣告需要
提供多種風格的皮膚、天氣預報、日歷等個性化功能
集成115聚合搜索、百度、Google等引擎入口,全方位搜索體驗
提供站內網(wǎng)址搜索、網(wǎng)站瀏覽記錄等功能
系統(tǒng)安全設置:安全驗證、系統(tǒng)負載控制、CC防護設置、IP禁止……將風險防患于未然
整合網(wǎng)站收錄申請查詢、用戶反饋等程序,便于了解網(wǎng)友需求,有助于改善用戶體驗
完善的數(shù)據(jù)庫管理,可進行在線數(shù)據(jù)庫備份、恢復、優(yōu)化及修復
全面的日志管理:后臺管理安全日志、MYSQL、PHP錯誤日志,便于程序監(jiān)控和操作記錄
visualstudio2012計算代碼?
VS2005,2003和2002的開源行計數(shù)器可在此處獲得:
此處還討論了創(chuàng)建一個計算VS插件的行,在Codeproject上完成代碼
另外Slick Edit Gadgets有一個很好的行計數(shù)器,這里:
和Microsoft Visual Studio Team System 2008包括一個良好的行計數(shù)器。
請記住:
通過代碼行測量編程進度就像按重量測量飛機構建進度一樣。 比爾蓋茨
#3樓
在Visual Studio Team System 2008中,您可以從菜單Analyze - 'Calculate Code Metrics for Solution'中進行操作,它將為您提供整個解決方案的行數(shù)(除其他外g )
#4樓
我發(fā)現(xiàn)powershell對此很有用。 我認為LoC無論如何都是一個非常虛假的指標,所以我不相信任何更正式的要求。
從一個小的解決方案的目錄:
PS C:\Path (gci -include *.cs,*.xaml -recurse | select-string .).Count
8396
PS C:\Path
這將計算所有解決方案的.cs和.xaml文件中的非空行。 對于更大的項目,我只使用了不同的擴展名列表:
PS C:\Other (gci -include *.cs,*.cpp,*.h,*.idl,*.asmx -recurse | select-string .).Count
909402
PS C:\Other
為什么在單個命令行執(zhí)行時會使用整個應用程序? :)
#5樓
cloc是一個出色的命令行,基于Perl的Windows可執(zhí)行文件,它將分解按文件格式分組的空白行,注釋行和源代碼行。
現(xiàn)在它不會專門在VS解決方案文件上運行,但它可以通過目錄遞歸,您可以根據(jù)需要設置文件名過濾器。
以下是其網(wǎng)頁的示例輸出:
prompt cloc perl-5.10.0.tar.gz
4076 text files.
3883 unique files.
1521 files ignored.
v 1.07 T=10.0 s (251.0 files/s, 84566.5 lines/s)
-------------------------------------------------------------------------------
Language files blank comment code scale 3rd gen. equiv
-------------------------------------------------------------------------------
Perl 2052 110356 112521 309778 x 4.00 = 1239112.00
C 135 18718 22862 140483 x 0.77 = 108171.91
C/C++ Header 147 7650 12093 44042 x 1.00 = 44042.00
Bourne Shell 116 3402 5789 36882 x 3.81 = 140520.42
Lisp 1 684 2242 7515 x 1.25 = 9393.75
make 7 498 473 2044 x 2.50 = 5110.00
C++ 10 312 277 2000 x 1.51 = 3020.00
XML 26 231 0 1972 x 1.90 = 3746.80
yacc 2 128 97 1549 x 1.51 = 2338.99
YAML 2 2 0 489 x 0.90 = 440.10
DOS Batch 11 85 50 322 x 0.63 = 202.86
HTML 1 19 2 98 x 1.90 = 186.20
-------------------------------------------------------------------------------
SUM: 2510 142085 156406 547174 x 2.84 = 1556285.03
-------------------------------------------------------------------------------
第三代等效量表是對第三代語言所需代碼量的粗略估計。 不是非常有用,但無論如何都很有趣。
#6樓
這里的答案有點過時,可能來自vs 2008時間。 因為在較新的Visual Studio版本2010/2012中,此功能已內置。 因此,沒有理由使用任何擴展或工具。
計算代碼行的功能 - 計算指標。 有了它,您可以計算每個項目或解決方案的指標(LOC,維護指數(shù),Cyclomatic指數(shù),繼承深度)。
在解決方案資源管理器中右鍵單擊解決方案或項目
?
并選擇“計算指標”
?
以后可以將用于分析和聚合的數(shù)據(jù)導入Excel。 同樣在Excel中,您可以過濾掉生成的類或指標中的其他噪音。 這些指標(包括代碼行LOC)也可以在構建過程中收集,并包含在構建報告中
#7樓
顯然工具更容易,但我覺得很酷在powershell :)
此腳本查找.sln文件中的所有.csproj引用,然后在每個csproj文件中找到包含在編譯中的文件。 對于包含在編譯中的每個文件,它會創(chuàng)建一個具有屬性的對象:Solution,Project,F(xiàn)ile,Lines。 它將所有這些對象存儲在列表中,然后根據(jù)需要對數(shù)據(jù)進行分組和投影。
#path to the solution file e.g. "D:\Code\Test.sln"
$slnFile = "D:\Code\Test.sln"
#results
$results = @()
#iterate through .csproj references in solution file
foreach($projLines in get-item $slnFile | Get-Content | Select-String '".*csproj')
{
$projFile = [System.IO.Path]::Combine([System.IO.Path]::GetDirectoryName($slnFile), [regex]::Match($projLines,'[^"]*csproj').Value)
$projFolder = [System.IO.Path]::GetDirectoryName($projFile)
#from csproj file: get lines for files to compile Compile Include="..."/
$includeLines = get-item $projFile | Get-Content | Select-String 'Compile Include'
#count of all files lines in project
$linesInProject = 0;
foreach($fileLine in $includeLines)
{
$includedFilePath = [System.IO.Path]::Combine($projFolder, [Regex]::Match($fileLine, '"(?file.*)"').Groups["file"].Value)
$lineCountInFile = (Get-Content $includedFilePath).Count
$results+=New-Object PSObject -Property @{ Solution=$slnFile ;Project=$projFile; File=$includedFilePath; Lines=$lineCountInFile }
}
}
#filter out any files we dont need
$results = $results | ?{!($_.File -match "Designer")}
#print out:
"---------------lines per solution--------------"
$results | group Solution | %{$_.Name + ": " + ($_.Group | Measure-Object Lines -Sum).Sum}
"---------------lines per peoject--------------"
$results | group Project | %{$_.Name + ": " + ($_.Group | Measure-Object Lines -Sum).Sum}
#8樓
這是Trick ..它也計算Js文件。
#9樓
正則表達式在VS2010和2012之間發(fā)生了變化,因此這里的大多數(shù)正則表達式解決方案都不再有效
(^(?!(\s*//.+)))+(^(?!(#.+)))+(^(?!(\s*\{.+)))+(^(?!(\s*\}.+)))+(^(?!(\s*\r?$)))+
將找到所有非空白的行,不僅僅是一個括號('{'或'}'),而不僅僅是#include或其他預處理器。
使用Ctrl - shift - f并確保啟用正則表達式。
VS 2010及更早版本的相應正則表達式為
^~(:Wh@//.+)~(:Wh@\{:Wh@)~(:Wh@\}:Wh@)~(:Wh@/#).+
#10樓
以下是Visual Studio 2012/2013/2015的更新,適用于那些想要執(zhí)行“查找”選項(我認為最簡單)的人:此RegEx將查找包含多個排除項的所有非空白行,以提供最準確的結果。
在“查找”框中輸入以下RegEx。 請務必選擇“使用正則表達式”選項。 根據(jù)您的需要將搜索選項更改為“當前項目”或“整個解決方案”。 現(xiàn)在選擇“全部查找”。 在“ 查找結果”窗口的底部,您將看到“匹配行”,即代碼行數(shù)。
^(?!(\s*\*))(?!(\s*\-\-\))(?!(\s*\\!\-\-))(?!(\s*\n))(?!(\s*\*\/))(?!(\s*\/\*))(?!(\s*\/\/\/))(?!(\s*\/\/))(?!(\s*\}))(?!(\s*\{))(?!(\s(using))).*$
此RegEx不包括以下項目:
評論
// This is a comment
多行注釋(假設行正確注釋,每行前面有*)
/* I am a
* multi-line
* comment */
用于智能感知的XML
/// summary
/// I'm a class description for Intellisense
/// /summary
HTML評論:
!-- I am a HTML Comment --
使用陳述:
using System;
using System.Web;
打開花括號:
{
閉合花括號:
}
注意:大括號之間的任何內容都將包含在搜索中,但在此示例中,只計算4行代碼,而不是18個實際的非空白行:
public class Test
{
/// summary
/// Do Stuff
/// /summary
public Test()
{
TestMe();
}
public void TestMe()
{
//Do Stuff Here
/* And
* Do
* Stuff
* Here */
}
}
我創(chuàng)建了這個以給我一個比以前的選項更準確的LOC計數(shù),并認為我會分享。 老板喜歡LOC計數(shù),所以我堅持了一段時間。 我希望其他人可以找到這個有用的,如果您有任何問題或需要幫助讓它工作,請告訴我。
#11樓
其他簡單工具適用于VS2008(開源): http : //
#12樓
您可以使用免費工具SourceMonitor
提供了許多措施:代碼行,語句計數(shù),復雜性,塊深度
通過圖表輸出圖形
#13樓
您可以使用Visual Studio代碼指標PowerTool 10.0 。 它是一個命令行實用程序,可以為您計算托管代碼的一些指標(包括代碼行)。 您可以獲得一個VS 2010插件, 將該工具引入Visual Studio ,并使其快速選擇菜單項并單擊“Analyze Solution”。
#14樓
找到這個提示: LOC與VS查找和替換
不是插件,如果這就是你要找的東西。
#15樓
一個簡單的解決方案是搜索所有文件。 使用通配符時鍵入“*”。 哪個會匹配所有線路。 在查找結果窗口的末尾,您應該看到排序的一行:
Matching lines: 563 Matching files: 17 Total files searched: 17
當然,這對于大型項目來說并不是很好,因為所有行都被配對并加載到內存中以便在查找結果窗口中顯示。
參考:
高級示例
#16樓
我更喜歡OxyProject Metrics VS Addin。
#17樓
嘗試neptuner。 除了LoC之外,它還為您提供空格,制表符,注釋行等內容。
#18樓
在Visual Studio 2015中,轉到“分析”菜單,然后選擇“計算代碼度量標準”。
#19樓
Visual Studio 2010 Ultimate具有此內置功能。
分析 - 計算代碼度量標準
#20樓
您可以在Visual Studio 2010中使用Project Line Counter加載項。通常它不能與Visual Studio 2010一起使用,但它可以使用有用的.reg文件: http : //。 PHP?CMD = newsitem及評論= news.1.41.0
#21樓
使用Visual Studio 2010 Ultimate中的菜單 - 分析 - 計算代碼度量標準選項。
#22樓
我想出了一個快速而臟的PowerShell腳本,用于計算文件夾結構中的行數(shù)。 它不像其他答案中引用的其他工具那樣功能齊全,但我認為在項目或解決方案中提供相對于彼此的代碼文件大小的粗略比較是足夠好的。
腳本可以在這里找到:
#23樓
我用了Ctrl + Shift + F. 接下來,在搜索框中輸入\\n并啟用正則表達式框。 然后在查找結果中,在屏幕的末尾是搜索到的文件數(shù)和找到的代碼行。
#24樓
同意Ali Parr。 WndTab Line Counter addin就是這樣一個工具。
從下載站點搜索以查找一些相關工具也是一個好主意。 ;tag=srch
#25樓
對于未來的讀者,我想建議Visual Studio 2010的DPack擴展 。
它內置了大量的實用程序,包括一個行計數(shù)器,它表示有多少行是空白的,代碼等等。
原文鏈接:
點
什么叫長尾關鍵詞?
長尾關鍵詞是指網(wǎng)站上非目標關鍵詞但也可以帶來搜索流量的關鍵詞,稱為長尾關鍵詞。 長尾關鍵詞的特征是比較長,往往是2-3個詞組成,甚至是短語,存在于內容頁面,除了內容頁的標題,還存在于內容中。 搜索量非常少,并且不穩(wěn)定。 長尾關鍵詞帶來的客戶,轉化為網(wǎng)站產(chǎn)品客戶的概率比目標關鍵詞高很多。 存在大量長尾關鍵詞的大中型網(wǎng)站,其帶來的總流量非常大。長尾關鍵詞基本屬性是:可延伸性,針對性強,范圍廣.
一是與企業(yè)產(chǎn)品或者網(wǎng)站定位精確度高的詞語,此類關鍵詞針對一些有明確目標需求的搜索引擎引入的用戶,這類人群是對你所經(jīng)營的網(wǎng)站產(chǎn)品有著明確認知程度的人群,但是這部分人群是網(wǎng)站流量的一小部分。大概占據(jù)網(wǎng)站整體流量的20%左右;
二是產(chǎn)品或者網(wǎng)站業(yè)務擴展出來的關鍵詞,這是面向對你經(jīng)營的網(wǎng)站或產(chǎn)品有著模糊概念的訪問人群設計的關鍵詞。這塊流量估計占整體網(wǎng)站搜索引擎流量的30%左右;
三是即將有可能成為搜索用戶使用并且找到網(wǎng)站的關鍵詞,這類關鍵詞語可以理解為比較長尾性關鍵詞語,可能是業(yè)務的周邊產(chǎn)品的延伸詞,或者是與網(wǎng)站內容擴展出的相關詞,這塊流量估計占整體網(wǎng)站搜索引擎流量的20%左右。
我們可以以"三亞旅游"這個關鍵詞作為基本關鍵詞進行擴展。
如:針對性比較強的關鍵詞"三亞蜈支洲""三亞蜈支洲旅游體會"等;
相關拓展的關鍵詞"三亞賓館""三亞旅游費用"等;
周邊產(chǎn)品的延伸詞"北京到三亞機票""北京到三亞打折機票""三亞旅行社""三亞就餐推薦"等。
以上以三類長尾詞進行了簡單列舉。
如何用 Node.js 和 Elasticsearch 構建搜索引擎
安裝 Elasticsearch
Elasticsearch 受Apache 2許可證保護,可以被下載,使用,免費修改。安裝Elasticsearch 之前你需要先確保在你的電腦上安裝了Java Runtime Environment (JRE) ,Elasticsearch 是使用java實現(xiàn)的并且依賴java庫運行。你可以使用下面的命令行來檢測你是否安裝了java
推薦使用java最新的穩(wěn)定版本(寫這篇文章的時候是1.8)。你可以在找到在你系統(tǒng)上安裝java的指導手冊。
接下來是下載最新版本的Elasticsearch (寫這篇文章的時候是2.3.5),去下載ZIP 文件。Elasticsearch 不需要安裝,一個zip文件就包含了可在所有支持的系統(tǒng)上運行的文件。解壓下載的文件,就完成了。有幾種其他的方式運行Elasticsearch ,比如:獲得TAR 文件或者為不同Linux發(fā)行版本的包。
如果你使用的是Mac操作系統(tǒng)并且安裝了?,你就可以使用這行命令安裝Elasticsearch brew install elasticsearch.Homebrew 會自動添加executables 到你的系統(tǒng)并且安裝所需的服務。它也可以使用一行命令幫你更新應用:brew upgrade elasticsearch.
想在Windows上運行Elasticsearch ,可以在解壓的文件夾里,通過命令行運行bin\elasticsearch.bat 。對于其他系統(tǒng),可以從終端運行 ./bin/elasticsearch.這時候,Elasticsearch 就應該可以在你的系統(tǒng)上運行了。
就像我之前提到的,你可以使用Elasticsearch的幾乎所有的操作,都可以通過RESTful APIs完成。Elasticsearch 默認使用9200 端口。為了確保你正確的運行了Elasticsearch。在你的瀏覽器中打開 ,將會顯示一些關于你運行的實例的基本信息。
圖形用戶界面
Elasticsearch不須圖形用戶界面,只通過REST APIs就提供了幾乎所有的功能。然而如果我不介紹怎么通過APIs和 Node.js執(zhí)行所有所需的操作,你可以通過幾個提供了索引和數(shù)據(jù)的可視化信息GUI工具來完成,這些工具甚至含有一些高水平的分析。
, 是同一家公司開發(fā)的工具, 它提供了數(shù)據(jù)的實時概要,并提供了一些可視化定制和分析選項。Kibana 是免費的。
還有一些是社區(qū)開發(fā)的工具,如?,?, 甚至谷歌瀏覽器的擴展組件.這些工具可以幫你在瀏覽器中查看你的索引和數(shù)據(jù),甚至可以試運行不同的搜索和匯總查詢。所有這些工具提供了安裝和使用的攻略。
創(chuàng)建一個Node.js環(huán)境
彈性搜索為Node.js提供一個官方模塊,稱為elasticsearch。首先,你需要添加模塊到你的工程目錄下,并且保存依賴以備以后使用。
然后,你可以在腳本里導入模塊,如下所示:
最終,你需要創(chuàng)建客戶端來處理與彈性搜索的通訊。在這種情況下,我假設你正在運行彈性搜索的本地機器IP地址是127.0.0.1,端口是9200(默認設置)。
注意:這篇導讀的所有源代碼都可以在GitHub下載查看。最簡單的查看方式是在你的PC機上克隆倉庫,并且從那里運行示例代碼:
數(shù)據(jù)導入
在本教程中,我將使用 1000 篇學術論文里的內容,這些內容是根據(jù)隨機算法逐一生成的,并以 JSON 格式提供,其中的數(shù)據(jù)格式如下所示:
JSON 格式中的每個字段如字面意思,無需多余解釋,但值得注意的是:由于body包含隨機生成的文章的全部的內容(大概有100~200個段落),所以并未展示。
雖然 Elasticsearch 提供了,、單個數(shù)據(jù)的方法,但我們采用接口導入數(shù)據(jù),因為批量接口在大型數(shù)據(jù)集上執(zhí)行操作的效率更高。
這里,我們調用函數(shù)bulkIndex建立索引,并傳入 3 個參數(shù),分別是:索引名 library,類型名library,JSON 數(shù)據(jù)格式變量 articles。bulkIndex函數(shù)自身則通過調用esClient對象的bulk接口實現(xiàn),bulk 方法包含一個body屬性的對象參數(shù),并且每個body屬性值是一個包含 2 種操作實體的數(shù)組對象。第一個實體是 JSON 格式的操作類型對象,該對象中的index屬性決定了操作的類型(本例子是文件索引)、索引名、文件ID。第二個實體則是文件對象本身。
注意,后續(xù)可采用同樣的方式,為其他類型文件(如書籍或者報告)添加索引。我們還可以有選擇的每個文件分配一個唯一的ID,如果不體統(tǒng)唯一的ID,Elasticsearch 將主動為每個文件分配一個隨機的唯一ID。
假設你已經(jīng)從代碼庫中下載了 Elasticsearch 項目代碼,在項目根目錄下執(zhí)行如下命令,即可將數(shù)據(jù)導入至Elasticsearch中:
檢查數(shù)據(jù)的索引是否準確
Elasticsearch 最大的特性是接近實時檢索,這意味著,一旦文檔索引建立完成,1 秒內就可被檢索(見)。索引一旦建立完成,則可通過運行 indice.js 檢查索引信息的準確性():
client 中的cat 對象方法提供當前運行實例的各種信息。其中的 indices 方法列出所有的索引信息,包括每個索引的健康狀態(tài)、以及占用的磁盤大小。 而其中的 v 選項為 cat方法新增頭部響應。
當運行上面代碼段,您會發(fā)現(xiàn),集群的健康狀態(tài)被不同的顏色標示。其中,紅色表示為正常運行的有問題集群;黃色表示集群可運行,但存在告警;綠色表示集群正常運行。在本地運行上面的代碼段,您極有可能(取決于您的配置)看到集群的健康狀態(tài)顏色是黃色,這是因為默認的集群設置包含 5 個節(jié)點,但本地運行只有 1 個實例正常運行。鑒于本教程的目的僅局限于 Elasticsearch 指導學習,黃色即可。但在線上環(huán)境中,你必須確保集群的健康狀態(tài)顏色是綠色的。
動態(tài)和自定義映射
如前所述, Elasticsearch 無模式(schema-free),這意味著,在數(shù)據(jù)導入之前,您無需定義數(shù)據(jù)的結構(類似于SQL數(shù)據(jù)庫需要預先定義表結構),Elasticsearch 會主動檢測。盡管 Elasticsearch 被定義為無模式,但數(shù)據(jù)結構上仍有些限制。
Elasticsearch 以映射的方式引用數(shù)據(jù)結構。當數(shù)據(jù)索引建立完成后,如果映射不存在,Elasticsearch 會依次檢索 JSON 數(shù)據(jù)的每個字段,然后基于被字段的類型(type)自動生成映射(mapping)。如果存在該字段的映射,則會確保按照同樣的映射規(guī)則新增數(shù)據(jù)。否則直接報錯。
比如:如果{"key1": 12} 已經(jīng)存在,Elasticsearch 自動將字段 key1 映射為長整型?,F(xiàn)在如果你嘗試通過{"key1": "value1", "key2": "value2"} 檢索, 則會直接報錯,因為系統(tǒng)預期字段 key1 為長整型。同時,如果通過 {"key1": 13, "key2": "value2"} 檢索則不會報錯,并為字段 key2 新增 string 類型。
映射不能超出文本的范圍,大都數(shù)情況下,系統(tǒng)自動生成的映射都可正常運行。
構建搜索引擎
一旦完成數(shù)據(jù)索引,我們就可以開始實現(xiàn)搜索引擎。Elasticsearch提供了一個直觀的基于JSON的全搜索查詢的結構-Query DSL,定義查詢。有許多有用的搜索查詢類型,但是在這篇文章中,我們將只看到幾個通用的類型。關于Query DSL的完整文章可以在看到。
請記住,我提供了每個展示例子的源碼的連接。設置完你的環(huán)境和索引測試數(shù)據(jù)后,你可以下載源碼,然后運行在你的機器上運行任何例子。可以通過命令行運行節(jié)點filename.js。
返回一個或多個索引的所有記錄
為了執(zhí)行我們的搜索,我們將使用客戶端提供的多種搜索方法。最簡單的查詢是match_all,它可以返回一個或多個索引的所有的記錄。下面的例子顯示了我們怎么樣獲取在一個索引中獲取所有存儲的記錄().
主要的搜索查詢包含在Query對象中。就像我們接下來看到的那樣,我們可以添加不同的搜索查詢類型到這個對象。我們可以為每一個Query添加一個查詢類型的關鍵字(如match_all),讓這個Query成為一個包含搜索選項的對象。由于我們想返回索引的所有記錄,所以在這個例子中沒有查詢選項。
除了Query對象,搜索體中可以包含其他選項的屬性,如 size 和from。size屬性決定了返回記錄的數(shù)量。如果這個值不存在,默認返回10個記錄。from屬性決定了返回記錄的起始索引,這對分頁有用。
理解查詢API的返回結果
如果你打印搜索API返回結果(上面例子的結果)日志。由于它包含了很多信息,剛開始看起來無所適從。
在最高級別日志輸出里,返回結果中含有took 屬性,該屬性值表示查找結果所用的毫秒數(shù),timed_out只有在最大允許時間內沒有找到結果時為true,_shards 是不同節(jié)點的狀態(tài)的信息(如果部署的是節(jié)點集群),hits是查詢結果。
hits的屬性值是一個含有下列屬性的對象:
total —表示匹配的條目的總數(shù)量
max_score — 找到的條目的最大分數(shù)
hits — 找到的條目的數(shù)組,在hits數(shù)組里的每一天記錄,都有索引,類型,文檔,ID,分數(shù),和記錄本身(在_source元素內)。
這十分復雜,但是好消息是一旦你實現(xiàn)了一個提取結果的方法,不管你的搜索查詢結果時什么,你都可以使用相同的格式獲取結果。
還需要注意的是Elasticsearch 有一個好處是它自動地給每一個匹配記錄分配分數(shù),這個分數(shù)用來量化文件的關聯(lián)性,返回結果的順序默認的按鈕分數(shù)倒排。在例子中我們使用match_all取回了所有的記錄,分數(shù)是沒有意義的,所有的分數(shù)都被計算為1.0。
匹配含指定字段值的文檔
現(xiàn)在我們看幾個更加有趣的例子. 我們可以通過使用 match 關鍵字查詢文檔是否與指定的字段值匹配。一個最簡單的包含 match 關鍵字的檢索主體代碼如下所示:
如上文所述, 首先通過為查詢對象新增一個條目,并指定檢索類型,上面示例給的是 match 。然后再檢索類型對象里面,申明待檢索的文檔對象,本例是 title 文檔對象。然后再文檔對象里面,提供相關檢索數(shù)據(jù),和 query 屬性。我希望你測試過上述示例之后,驚訝于 Elasticsearch 的檢索效率。
上述示例執(zhí)行成功后,將返回title(標題)字段與任一 query 屬性詞匹配的所有文檔信息。同時還可以參考如下示例,為查詢對象附加最小匹配數(shù)量條件:
與該查詢匹配的文檔 title(標題)字段至少包含上訴指定的 3 個關鍵詞。如果查詢關鍵詞少于 3個,那么匹配文檔的 title(標題)字段必須包含所有的查詢詞。Elasticsearch 的另一個有用的功能是 fuzziness(模糊匹配).這對于用戶輸入錯誤的查詢詞將非常有用,因為fuzzy(模糊匹配)將發(fā)現(xiàn)拼寫錯誤并給出最接近詞供選擇。對于字符串類型,每個關鍵字的模糊匹配值是根據(jù)算法?算出的最大允許值。fuzziness(模糊匹配)示例如下所示:
多個字段搜索
如果你想在多個字段中搜索,可以使用multi_match搜索類型。除了Query對象中的fields屬性外,它同match有點類似。fields屬性是需要搜索的字段的集合。這里我們將在title,authors.firstname, 和authors.lastname 字段中搜索。
multi_match查詢支持其他搜索屬性,如minimum_should_match 和fuzziness。Elasticsearch支持使用通配符(如*)匹配字段,那么我們可以使用['title', 'authors.*name']把上面的例子變得更短些。
匹配一個完整的句子
Elasticsearch也支持精確的匹配一個輸入的句子,而不是在單詞級別。這個查詢是在普通的match 查詢上擴展而來,叫做 match_phrase。下面是一個match_phrase的例子
聯(lián)合多個查詢
到目前為止,在例子中我們每次請求只使用了單個查詢。然而Elasticsearch允許你聯(lián)合多個查詢。最常用的復合查詢是bool,bool查詢接受4種關鍵類型must, should, must_not, 和filter. 像它們的名字表示的那樣,在查詢結果的數(shù)據(jù)里必須匹配must里的查詢,必須不匹配must_not里的查詢,如果哪個數(shù)據(jù)匹配should里的查詢,它就會獲得高分。每一個提到的元素可以使用查詢數(shù)組格式接受多個搜索查詢。
下面,我們使用bool查詢及一個新的叫做query_string的查詢類型。它允許你使用 AND 或 OR寫一些比較高級的查詢。另外,我們使用了 range查詢,它可以讓我們通過給定的范圍的方式去限制一個字段。
在上面的例子中,查詢返回的數(shù)據(jù),作者的名包含term1 或它們的姓包含term2,并且它們的title含有term3,而且它們不在2011,2012或2013年出版的,還有在body字段里含有給定句子數(shù)據(jù)將獲得高分,并被排列到結果的前面(由于在should從句中的match 查詢)。
過濾,聚合,和建議
除了它先進的搜索功能外,Elasticsearch 還提供了其他的功能。接下來,我們再看看其他三個比較常用的功能。
過濾
也許,你經(jīng)常想使用特定的條件凝縮查詢結果。Elasticsearch通過filters 提供了這樣的功能。在我們的文章數(shù)據(jù)里,假設你的查詢返回了幾個文章,這些文章是你選擇的在5個具體年份發(fā)布的文章。你可以簡單的從搜索結果中過濾出那些不匹配條件的數(shù)據(jù),而不改變查詢結果的順序。
在bool 查詢的must 從句中,過濾和相同查詢之間的不同之處在于,過濾不會影響搜索分數(shù),而must 查詢會。當查詢結果返回并且用戶使用給定的條件過濾時,他們不想改變結果的順序,相反地,他們只想從結果中移除不相關的數(shù)據(jù)。過濾與搜索的格式一樣,但在通常情況下,他們在有明確值的字段上定義,而不是文本字符串上。Elasticsearch 推薦通過bool復合查詢的filter從句添加過濾。
繼續(xù)看上面的例子,假設我們想把搜索結果限制在在2011到2015年之間發(fā)布的文章里。這樣做,我們只需要在一般搜索查詢的filter 部分添加range 查詢。這將會從結果中移除那些不匹配的數(shù)據(jù)。下面是一個過濾查詢的例子
聚合
聚合框架會基于一次搜索查詢,提供各種聚合數(shù)據(jù)和統(tǒng)計信息。兩個主要的聚合類型是度量和分塊, 度量聚合會對一個文檔的集合進行持續(xù)的跟蹤并計算度量,而分塊聚合則會進行塊的構建,每個塊都會跟一個鍵和一個文檔查詢條件關聯(lián)起來。度量聚合的示例有平均值,最小值,最大值,加總值還有計數(shù)值。分塊聚合的示例有范圍、日期范圍、直方圖以及主題項。對聚合器更加深入的描述可以在?找到。
聚合可以放置在一個 aggregations 對象里面,而對象自己則是被直接放到 search 對象體中。在 aggregations 對象里面,每一個鍵都是由用戶賦予一個聚合器的名稱。聚合器的類型和其它選項都應該是作為這個鍵的值而放置的。接下來我們要來看看兩個不同類型的聚合器,一個是度量的,一個塊的。我們會用度量聚合器來嘗試找出數(shù)據(jù)集合中最小的年份值(也就是最久遠的文章),而使用塊集合器我要做的就是嘗試找出每一個關鍵詞各自出現(xiàn)了多少次。
在上述示例中,我們將度量聚合器命名為 min_year (也可以是其它名稱), 也就是 year 這個域上的 min 類型。塊聚合器責備命名為 keywords, 就是 keywords 這個域上的 terms 類型。聚合操作的結果被裝在了響應消息里的 aggregations 元素里面,更深入一點會發(fā)現(xiàn)里面包含了每一個聚合器(這里是 min_year 和 keywords)以及它們的聚合操作結果。 如下是來自這個示例響應消息中的部分內容。
響應消息中默認最多會有10個塊返回。你可以在請求中 filed 的邊上加入一個size鍵來規(guī)定返回的塊的最大數(shù)量。如果你想要接收到所有的塊,可以將這個值設置為 0。
建議
Elasticsearch 提供了多種可以對輸入內容提供替換和補全的關聯(lián)項推薦器(見)。下面將介紹術語和短語推薦器。術語推薦器為每個輸入文本中的術語提供關聯(lián)推薦(如果有的話),而短語推薦器將整個輸入文本看做一個短語(與將其拆分成術語對比),然后提供其他短語的推薦(如果有的話)。使用推薦API時,需要調用Node.js client的suggest方法。如下為術語推薦器的示例。
與其他client的方法相同,在請求體中包含一個index字段指明采用的索引。在body字段中添加查詢推薦的文本,然后給每個推薦器一個(包含了聚合對象的)名稱(本例中的titleSuggester)。其值指明了推薦器的類型和配置。這里,為title字段使用了術語推薦器,限制最大建議的數(shù)量是每個token最多5個(size: 5)。
建議API返回的數(shù)據(jù)中包含了對應請求中每一個建議器的key,其值是一個與你輸入文本中術語數(shù)量相同的一個數(shù)組。對于數(shù)組中的每一個元素,包含一個options數(shù)組,其每個對象的text字段中包含了推薦的文本。如下是上面例子中返回數(shù)據(jù)的一部分。
獲取短語推薦的時候,采用與上文相同的格式并替換推薦器的類型字段即可。如下的例子中,返回數(shù)據(jù)將與上例格式相同。
聚合搜索源碼的介紹就聊到這里吧,感謝你花時間閱讀本站內容,更多關于全網(wǎng)搜索源碼、聚合搜索源碼的信息別忘了在本站進行查找喔。
掃描二維碼推送至手機訪問。
版權聲明:本文由飛速云SEO網(wǎng)絡優(yōu)化推廣發(fā)布,如需轉載請注明出處。