歸納地說,Elasticsearch將數據分紅兩類:準確值(Exact values)和全文本(Full text)。dom
準確值就是它們聽上去的那樣。諸如日期或用戶ID。固然字符串也能夠是準確值,如用戶名或郵件地址。準確值Foo與準確值foo是不一樣的。準確值2014和準確值2014-09-15也是不一樣的。學習
另外一方面,全文本(full text)指的是一般用人類語言寫的文本數據,像一條tweet的文本或一封郵件的內容。搜索引擎
全文本也常常被稱爲非結構化數據(unstructured data)。這個定義並不十分恰當,由於天然語言是高度結構化的。問題在於天然語言的規則是很是複雜的,以致於計算機很難正確地解析它們。例如如下句子:May is fun but June bores me.spa
請問,May 和 June到底指的是月份仍是人?orm
準確值很是容易查詢。由於它要麼匹配查詢條件,要麼不匹配。像下面這種查詢就很容易使用SQL來表達:索引
WHERE name = "John Smith"文檔
AND user_id = 2字符串
AND date > "2014-09-15"it
相對準確值查詢,全文查詢更爲微妙。咱們不會只問:「這份文檔是否能匹配此次查詢」,而是問:「這份文檔有多匹配此次查詢」。換種說法,這份文檔與此次查詢有多相關。ast
咱們不多對整個全文文本字段(full-text field)進行準確匹配。取而代之,咱們會想去查詢存在裏面的文本字段。不過不僅這種方式,咱們指望搜索引擎能理解咱們的意圖:
* 當咱們搜索UK時,它應該還會返回提到United Kingdom的文檔
* 當咱們搜索jump時,它應該還會匹配jumped、jumps、jumping,甚至leap
* jhnny walker 應該還會匹配Johnnie Walker。 而johnnie depp應該匹配到Johnny Depp。
* fox news hunting應該返回在Fox News上的關於hunting的故事。而fox hunting news應該返關於fox hunting的新聞。
爲了使這種全文搜索更容易,Elasticsearch首先對文本進行分析,而後使用分析結果構建反向索引(inverted index)。接下來的兩節,咱們將討論反向索引和這個分析過程。
小結
一開始學習信息檢索時,很容易地就認爲SQL語句不是徹底能夠實現搜索功能了麼。後來學習到全文檢索和反向索引,就明白信息檢索背後還須要不少不一樣的技術來支持,如分詞技術、索引、天然語言處理等。
說回來,目前我學習到,使用的都是「索引」思路來解決搜索問題。那麼是否是存在另外一些人們不知道的信息檢索思路?這裏說的索引思路,指的是使用某種方法抽取出待搜索物的特徵,查詢時,只要與這些特徵比較就能夠哪些待搜索物匹配查詢了。