Elasticsearch——multi termvectors的用法


前一篇已經翻譯過termvectors的使用方法了,這對於學習如何使用tf-idf來說是很有幫助的了。
更多內容參考我整理的ELK教程

什么是TF-IDF?

今天早晨起來,看《ES IN ACTION》的時候,遇到了這個術語,看英文實在不明白,於是百度了一下。看到了阮一峰的一篇關於它的文章,講解的十分簡單明了,不得不佩服大家的作品,就是不一樣。

其實TF-IDF是一種全文檢索很常見的算法,即按照關鍵詞以及權重來判斷用戶想要的是哪一個相關的文檔。

比如說,我的名字叫xingoo這句話,想要針對它來做一次全文檢索。

第一步,就是對它進行分詞,可以分為 名字 xingoo其中是一種停頓詞,很多文檔中都會出現,因此可以忽略。那么關鍵詞可以變為:名字``xingoo。那么名字``xingoo這兩個詞出現了多少次,就可以作為TF,即term frequnency,詞頻。

第二步,如果其他的文檔中也會出現名字這種詞,而很少會出現xingoo這種個性話的詞。因此采用一種逆向權重法,即越少出現的詞,越特殊,越能代表這篇文檔的特殊性。這個就叫做IDF,即Inverse Document Frequency,你文檔頻率。

關於他們的計算公式,可以參考阮一峰的文章,很容易理解的!

multi tervectors

再說回官方文檔吧,這次介紹的是一次性返回多個查詢的termvectors,原理和multi get類似,都是使用一個docs的數組,請求多個index,type,id。

curl 'localhost:9200/_mtermvectors' -d '{
   "docs": [
      {
         "_index": "testidx",
         "_type": "test",
         "_id": "2",
         "term_statistics": true
      },
      {
         "_index": "testidx",
         "_type": "test",
         "_id": "1",
         "fields": [
            "text"
         ]
      }
   ]
}'

索引可以放在url上面,這樣docs中就可以忽略,也可以在docs進行覆蓋:

curl 'localhost:9200/testidx/_mtermvectors' -d '{
   "docs": [
      {
         "_type": "test",
         "_id": "2",
         "fields": [
            "text"
         ],
         "term_statistics": true
      },
      {
         "_type": "test",
         "_id": "1"
      }
   ]
}'

type也是如此:

curl 'localhost:9200/testidx/test/_mtermvectors' -d '{
   "docs": [
      {
         "_id": "2",
         "fields": [
            "text"
         ],
         "term_statistics": true
      },
      {
         "_id": "1"
      }
   ]
}'

如果索引和類型都一樣,只有請求的id不一樣,那么可以把id放在一個數組里面:

curl 'localhost:9200/testidx/test/_mtermvectors' -d '{
    "ids" : ["1", "2"],
    "parameters": {
        "fields": [
                "text"
        ],
        "term_statistics": true,
        …
    }
}'

由於termvectors支持用戶自己定義的文檔,而不是ES中存儲的。因此可以按照下面的語法,請求多個自定義的文檔進行解析:

curl 'localhost:9200/_mtermvectors' -d '{
   "docs": [
      {
         "_index": "testidx",
         "_type": "test",
         "doc" : {
            "fullname" : "John Doe",
            "text" : "twitter test test test"
         }
      },
      {
         "_index": "testidx",
         "_type": "test",
         "doc" : {
           "fullname" : "Jane Doe",
           "text" : "Another twitter test ..."
         }
      }
   ]
}'


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM