1. 程式人生 > >全文搜尋技術

全文搜尋技術

全文檢索技術是資訊檢索技術的一種,主要是使用者的查詢請求和全文中的每一個詞進行比較,不考慮查詢請求和文件的語法上的匹配,在資訊檢索工具中,全文檢索技術是最通用的和實用的。簡單的說先建立索引,再對索引進行搜尋的過程就叫全文檢索(Full-text  Search)

我們把每次從結構化和非結構化的資料中提取出來的資訊然後重寫組合成資訊,這部分資訊叫索引

建立索引一般使用倒排索引技術,每次先把文件生產索引資料,查詢時使用相同的分詞效果使用同一個分詞器進行分詞

由於更新單個文件,工作量很大,我們使用先刪除再插入文件建立索引。將文件中的常用的語氣詞什麼的‘的’、‘和’這樣一類詞設定在停用字典中不對他進行生產,在搜尋時也能加快搜索速度。

lucene 的官網: http://lucene.apache.org/core/index.html

這種先建立索引,再對索引進行搜尋的過程就叫全文檢索(Full-text Search)

這也是全文搜尋相對於順序掃描的優勢之一:一次索引,多次使用。

在這裡我們使用的是反向索引從字串到檔案,字元組成的字串和每個字元指向一個倒排索引列的文件,共同組成了字典

建立索引的過程:將文件分成一個個單詞,去除標點符號,去除停用詞,經過分詞(Tokenizer)後得到詞元(Token)

將詞元轉換為語言處理元件主要是對得到的詞元(Token)做一些語言相關的處理

1.變為小寫

2. 將單詞縮減為詞根形式,如“cars ”到“car ”等。這種操作稱為:stemming 。

3. 將單詞轉變為詞根形式,如“drove ”到“drive ”等。這種操作稱為:lemmatization 。

找出詞對文件的重要過程稱為計算詞的權重過程

計算詞的權重(term weight)有兩個引數,第一個是詞(Term),第二個是文件(Document)。

詞的權重(Term weight)表示此詞(Term)在此文件中的重要程度,越重要的詞(Term)有越大的權重(Term weight),因而在計算文件之間的相關性中將發揮更大的作用

判斷詞之間的關係從而得到文件相關性的過程應用一種叫做向量空間模型的演算法(Vector Space Model

計算權重:Term frequency:表明term在文件中出現了多少次tf越大越重要,document  Frquency 表示多少個文件出現過這個term,df越大越不重要

權重=tf×log(n/df)  -----------------------------n為在所有文件中這個詞出現的總的次數

這只是term的權重計算

[圖]權重計算公式

[圖]權重計算公式變數

這僅僅只term weight計算公式的簡單典型實現。實現全文檢索系統的人會有自己的實現,Lucene就與此稍有不同。

2. 判斷Term之間的關係從而得到文件相關性的過程,也即向量空間模型的演算法(VSM)。

我們把文件看作一系列詞(Term),每一個詞(Term)都有一個權重(Term weight),不同的詞(Term)根據自己在文件中的權重來影響文件相關性的打分計算。

於是我們把所有此文件中詞(term)的權重(term weight) 看作一個向量。

Document = {term1, term2, …… ,term N}

Document Vector = {weight1, weight2, …… ,weight N}

同樣我們把查詢語句看作一個簡單的文件,也用向量來表示。

Query = {term1, term 2, …… , term N}

Query Vector = {weight1, weight2, …… , weight N}

我們把所有搜尋出的文件向量及查詢向量放到一個N維空間中,每個詞(term)是一維。

如圖:

[圖]向量空間模型

我們認為兩個向量之間的夾角越小,相關性越大。

所以我們計算夾角的餘弦值作為相關性的打分,夾角越小,餘弦值越大,打分越高,相關性越大。

有人可能會問,查詢語句一般是很短的,包含的詞(Term)是很少的,因而查詢向量的維數很小,而文件很長,包含詞(Term)很多,文件向量維數很大。你的圖中兩者維數怎麼都是N呢?

在這裡,既然要放到相同的向量空間,自然維數是相同的,不同時,取二者的並集,如果不含某個詞(Term)時,則權重(Term Weight)為0。

相關性打分公式如下:

[圖]相關性打分的公式

舉個例子,查詢語句有11個Term,共有三篇文件搜尋出來。其中各自的權重(Term weight),如下表格。

t1

t2

t3

t4

t5

t6

t7

t8

t9

t10

t11

D1

0

0

.477

0

.477

.176

0

0

0

.176

0

D2

0

.176

0

.477

0

0

0

0

.954

0

.176

D3

0

.176

0

0

0

.176

0

0

0

.176

.176

Q

0

0

0

0

0

.176

0

0

.477

0

.176

於是計算,三篇文件同查詢語句的相關性打分分別為:

[圖]文件一的打分計算

[圖]文件二的打分計算

[圖]文件三的打分計算

於是文件二相關性最高,先返回,其次是文件一,最後是文件三。

到此為止,我們可以找到我們最想要的文件了。

說了這麼多,其實還沒有進入到Lucene,而僅僅是資訊檢索技術(Information retrieval)中的基本理論,然而當我們看過Lucene後我們會發現,Lucene是對這種基本理論的一種基本的的實踐。所以在以後分析Lucene的文章中,會常常看到以上理論在Lucene中的應用。

在進入Lucene之前,對上述索引建立和搜尋過程所一個總結,如圖:

[圖]索引建立和搜尋過程

1. 索引過程:

1) 有一系列被索引檔案

2) 被索引檔案經過語法分析和語言處理形成一系列詞(Term) 。

3) 經過索引建立形成詞典和反向索引表。

4) 通過索引儲存將索引寫入硬碟。

2. 搜尋過程:

a) 使用者輸入查詢語句。

b) 對查詢語句經過語法分析和語言分析得到一系列詞(Term) 。

c) 通過語法分析得到一個查詢樹。

d) 通過索引儲存將索引讀入到記憶體。

e) 利用查詢樹搜尋索引,從而得到每個詞(Term) 的文件連結串列,對文件連結串列進行交,差,並得到結果文件。

f) 將搜尋到的結果文件對查詢的相關性進行排序。

g) 返回查詢結果給使用者

相關推薦

全文搜尋技術--solr7.1之mysql的安裝步驟

1.安裝命令 #>線上安裝wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm 輸完上面一句話不能正常的下載安裝包可以試試下面這句話 yum -y install wget 然後繼續執行下面的語句 rpm -ivh

全文搜尋技術--Solr7.1之配置中文分析器

前言:中國文化博大精深,但是solr只能一個一個的識別,而是更加符合中國人的習慣,所以加了中文分析器。 1.安裝中文分詞器 第一步:把中文分詞器(ik-analyzer-solr7-7.x.jar)/usr/local/solr_tomcat/webapps/solr/WEB-INF/lib下 第二步:

全文搜尋技術

全文檢索技術是資訊檢索技術的一種,主要是使用者的查詢請求和全文中的每一個詞進行比較,不考慮查詢請求和文件的語法上的匹配,在資訊檢索工具中,全文檢索技術是最通用的和實用的。簡單的說先建立索引,再對索引進行搜尋的過程就叫全文檢索(Full-text  Search) 我們把每次

【Lucene】全文搜尋技術

大綱  2.3 索引 1、需求分析 1.1 資料分類 我們生活中的資料總體分為兩種:結構化資料和非結構化資料。 結構化資料:指具有固定格式或有限長度的資料,如資料庫,元資料等。 非結構化資

全文檢索技術---solr

可擴展 spa start common sha https 站內搜索 請求方法 效果 1 Solr介紹 1.1 什麽是solr Solr 是Apache下的一個頂級開源項目,采用Java開發,它是基於Lucene的全文搜索服務器。Solr可以獨立運行在

lucene教程--全文檢索技術

bss bsp 詳細 .cn 總結 bbs 實例demo 技術 .net 1 Lucene 示例代碼 https://blog.csdn.net/qzqanzc/article/details/80916430 2 Lucene 4.7 學習及實例

瞭解學習 Elasticsearch 及其與 Python 實現全文搜尋

Elasticsearch簡介 ElasticSearch是一個基於Lucene的搜尋伺服器.它提供了一個分散式多使用者能力的全文搜尋引擎,基於RESTful web介面。Elasticsearch是用Java開發的,並作為Apache許可條款下的開放原始碼釋出,是當前流行的企業級搜尋引擎。設計

Eclipse Ctrl+H 全文搜尋正則表示式應用

Eclipse IDE 有個強大的搜尋工具,選單search -> search或快捷鍵Ctrl+H,即可開啟搜尋對話方塊,如下圖所示: 上圖所示為查詢檔案中包含toSelectDataSource字串的所有js或jsp檔案,並且大小寫敏感。 除此之外,還可以使用正則實現功能更加

ElasticSearch最佳入門實踐(三十八)精確匹配與全文搜尋的對比分析

1、ES中的兩種搜尋模式 1、exact value 2、full text 2、exact value 2017-01-01,exact value,搜尋的時候,必須輸入2017-01-01,才能搜尋出來。如果你輸入一個01,是搜尋不

如何使用ABAP Restful API進行程式碼的全文搜尋

使用這個程式碼全文搜尋的前提條件,是在事務碼SFW5裡啟用業務功能:SRIS_SOURCE_SEARCH 只需要把這個url貼到瀏覽器裡: https:// 意思是搜尋host指定的伺服器上所有包含了字串Jerry的ABAP程式碼。 瀏覽器裡顯示的結果: 隨便驗證幾個結果,證明搜尋是準確

sphinx全文搜尋在windows下安裝與使用方法

sphinx-for-chinese的使用方法將使用 sphinx-for-chinese-2.2.1-dev-r4311-win32 為例子,目前我只找到最新的是這個版本2013.11.09釋出。 下載地址:http://sphinxsearchcn.github.io/ 下載完後解壓出來得到以下

使用haystack實現Django的全文搜尋 -- Elasticsearch搜尋引擎

全文搜尋: 在使用python進行web開發的時候,免不了需要使用到全文搜尋;全文搜尋和我們平常使用的資料庫的模糊搜尋查詢不一樣,例如在mysql資料庫中,如果進行模糊查詢,比如 name like '%wang%'這一類的,效率是非常低的;而我們需求的全文搜尋,在效率方面要求是很高

全文檢索技術 && Lucene

1.全文檢索技術理論基礎 1.全文檢索技術的解決方案 原來的方法和實現搜尋功能的流程圖: 傳統的搜尋引擎技術,在一般資料庫資料量比較小,使用者量比較小的時候是比較常見的 但是在資料量增加到一定的量級的時候,資料庫的壓力就會變得很大,查詢的速度會很慢,我們需要更好的解決方案來分擔

全文搜尋儲存引擎 Elasticsearch 一點點

開始請大家想一個問題,如何統計一個Web站點的有效PV? 針對使用者請求的URL,統計時做模式匹配-------->即使用者真正去開啟一個站點的有效頁面並對每個頁面的入口的訪問做一個統計瀏覽量; 簡要搜尋引擎 搜尋引擎在網際網路上特別多有專業(Startpage,Google,Yah

ArangoDB 釋出 3.4 正式版:全文搜尋、GeoJSON、流式遊標

   多模型資料庫的理念是:給你提供了一種多檢視檢視資料的能力。ArangoDB 的資料庫背後的理念是:可以自由的將這些檢視組合到單個查詢中。在 ArangoDB 3.4的更新中,我們進一步的擴充套件了 ArangoDB 的這些功能。對於每次釋出 ArangoDB 的新版本,我

SQL Server全文搜尋(轉載)

看這篇文章之前請先看一下下面我摘抄的全文搜尋的MSDN資料,基本上MSDN上關於全文搜尋的資料的我都copy下來了並且非常認真地閱讀和試驗了一次,並且補充了一些SQL語句,這篇文章本人抽取了一些本人自認為是重點的出來並且加入了一些自己的內容,補充MSDN上沒有的和整理了網上關於全文搜尋的資料至於全文搜尋的效能

Elasticsearch全文搜尋控制精準度

前言 本文主要是關於全文搜尋控制精準度的操作 其他搜尋請參考: 一、使用operator 搜尋結果中必須至少包括run、jump兩種愛好 GET people/_search {

談談對搜尋技術Elastic Search&Lucene的理解

前言 十一一直陪家人,所以也沒時間寫文章。最近剛好趕上Elastic Search上市,其實在圈子裡還是挺轟動的,因為這個也是少數的靠賣開源軟體服務上市的公司。大家都知道ES是做搜尋服務的,今天就聊聊我對搜尋的認識 從業務屬性講 搜尋的話,其實是大家接觸最多的一

全文檢索技術---Lucene(概述)

資料分類: 我們生活中的資料總體分為兩種:結構化資料和非結構化資料。         1) 結構化資料:                 指具有固定格式或有限長度的資料,如資料庫,元資料等。                 因為結構化資料的儲存一般都是有規律的,

計算機演算法設計與分析之遞迴與分治策略——二分搜尋技術

遞迴與分治策略 二分搜尋技術   我們所熟知的二分搜尋演算法是運用分治策略的典型例子,針對這個演算法,先給出一個簡單的案例。   目的:給定已排好序的n個元素a[0:n-1],現要在這n個元素中找出一特定的元素x。   我們首先想到的最簡單的是用順序搜尋方法,逐個比較a[0:n-1]中元素,直至找出元