12.term_vectors查看
文章目錄
- 1. Term Vectors 簡介
- 1. 返回值
- 2. term過濾
- 3. 示例:自動生成term向量
- 4. 示例:request 中傳入doc
- 5. Per-field 分析器
- 6. 示例:term過濾
1. Term Vectors 簡介
Term Vectors(term向量)
返回特定文檔field中的term的信息和統(tǒng)計信息。文檔可以存儲在索引中或由request提供。term向量請求的結(jié)果默認(rèn)為實時的,不是近實時的。這可以通過將realtime參數(shù)設(shè)置為false來更改為非實時的。
也可以使用url中的參數(shù)指定檢索信息的field:
GET /twitter/_termvectors/1?fields=message或通過在請求主體中添加請求的field(參見下面的示例)。也可以使用通配符指定field,類似于多匹配查詢
注意
請注意/_termvector的使用方式在2.0中已廢棄,請使用_termvectors替代。
1. 返回值
請求可以得到三種類型的值:term信息,term統(tǒng)計和field統(tǒng)計。默認(rèn)情況下,所有term信息與field統(tǒng)計信息都會被返回,但不包含term統(tǒng)計信息。
term信息
如果請求的信息沒有存儲在索引中,會嘗試進(jìn)行即時計算。另外,也可以基于請求方提供的doc計算term向量的信息。
也就是說mapping中不需要單獨定義term_vector 的mapping param ,但是使用的時候有時候表現(xiàn)有些奇怪。
比如我使用
可能無法召回vector信息,但是增加fields字段參數(shù),比如下面,就可以獲取到vector信息了
GET seats/_termvectors/8092?fields=actors注意
offset 的start和end 是跟軍UTF-16編碼來計算的。如果要使用這些offset來從原始文本中獲取term,則應(yīng)確保使用UTF-16對正在使用的子字符串進(jìn)行編碼。
term統(tǒng)計
設(shè)置term_statistics為true(默認(rèn)為false)將返回:
默認(rèn)情況下這些值不返回,因為term統(tǒng)計數(shù)據(jù)會嚴(yán)重影響性能。
field統(tǒng)計
將field_statistics設(shè)置為false(默認(rèn)值為true)將省略:
2. term過濾
可以根據(jù)term向量的tf-idf特性來對term向量進(jìn)行過濾,這個有助于篩選比較有用的特診向量。
可以使用以下參數(shù)
term和field統(tǒng)計信息不是精準(zhǔn)的。刪除的doc不會被統(tǒng)計。而且僅針對請求文檔所在的分片檢索信息。因此,term和field的統(tǒng)計信息只是作為相對的參考信息,準(zhǔn)確的數(shù)字沒有意義,。默認(rèn)情況下,當(dāng)請求的時候攜帶doc文檔的時候,會隨機(jī)選擇一個碎片來獲取統(tǒng)計數(shù)據(jù)。有routing的話僅使用路由來命中特定的分片。
示例:返回存儲term向量
首先,我們創(chuàng)建一個存儲term向量、有payload等的索引:
然后,我們添加一些文檔:
PUT /twitter/_doc/1 {"fullname" : "John Doe","text" : "twitter test test test " }PUT /twitter/_doc/2 {"fullname" : "Jane Doe","text" : "Another twitter test ..." }以下請求返回文檔1(John Doe)中fieldtext的所有信息和統(tǒng)計信息:
GET /twitter/_termvectors/1 {"fields" : ["text"],"offsets" : true,"payloads" : true,"positions" : true,"term_statistics" : true,"field_statistics" : true }返回{"_id": "1","_index": "twitter","_type": "_doc","_version": 1,"found": true,"took": 6,"term_vectors": {"text": {"field_statistics": {"doc_count": 2,"sum_doc_freq": 6,"sum_ttf": 8},"terms": {"test": {"doc_freq": 2,"term_freq": 3,"tokens": [{"end_offset": 12,"payload": "d29yZA==","position": 1,"start_offset": 8},{"end_offset": 17,"payload": "d29yZA==","position": 2,"start_offset": 13},{"end_offset": 22,"payload": "d29yZA==","position": 3,"start_offset": 18}],"ttf": 4},"twitter": {"doc_freq": 2,"term_freq": 1,"tokens": [{"end_offset": 7,"payload": "d29yZA==","position": 0,"start_offset": 0}],"ttf": 2}}}} }3. 示例:自動生成term向量
未明確存儲在索引中的term向量將自動計算。以下請求返回文檔1中field的所有信息和統(tǒng)計信息,即使term尚未明確存儲在索引中。請注意,對于text這個field,因為設(shè)置mapping的時候指定了term_vector mapping param,所以這個字段的termvector不會重新生成。
GET /twitter/_termvectors/1 {"fields" : ["text", "some_field_without_term_vectors"],"offsets" : true,"positions" : true,"term_statistics" : true,"field_statistics" : true }some_field_without_term_vectors 代表了沒有term_vectors屬性的字段
4. 示例:request 中傳入doc
還可以為request中的doc生成term向量,也就是生成索引中不存在的文檔。例如,以下請求將返回與示例1中相同的結(jié)果。所使用的映射由索引和類型確定。
如果動態(tài)映射打開(默認(rèn)),則不在原始映射中的文檔field將被動態(tài)創(chuàng)建。
GET /twitter/_termvectors {"doc" : {"fullname" : "John Doe","text" : "twitter test test test"} }5. Per-field 分析器
另外,可以通過使用per_field_analyzer參數(shù)來提供不同于當(dāng)前的分析器。這對于以任何方式生成term向量是有用的,特別是在使用request中的doc時。當(dāng)為已經(jīng)存儲的term向量提供分析器時,將重新生成項向量。
GET /twitter/_termvectors {"doc" : {"fullname" : "John Doe","text" : "twitter test test test"},"fields": ["fullname"],"per_field_analyzer" : {"fullname": "keyword"} }響應(yīng):
{"_index": "twitter","_type": "_doc","_version": 0,"found": true,"took": 6,"term_vectors": {"fullname": {"field_statistics": {"sum_doc_freq": 2,"doc_count": 4,"sum_ttf": 4},"terms": {"John Doe": {"term_freq": 1,"tokens": [{"position": 0,"start_offset": 0,"end_offset": 8}]}}}} }6. 示例:term過濾
最后,返回的term可以根據(jù)他們的tf-idf分?jǐn)?shù)進(jìn)行過濾。在下面的例子中,我們從具有給定“plot”field值的request中的doc中獲取三個“interesting”的關(guān)鍵字。請注意,關(guān)鍵字“Tony”或任何停止詞不是響應(yīng)的一部分,因為它們的tf-idf必須太低。
GET /imdb/_termvectors {"doc": {"plot": "When wealthy industrialist Tony Stark is forced to build an armored suit after a life-threatening incident, he ultimately decides to use its technology to fight against evil."},"term_statistics" : true,"field_statistics" : true,"positions": false,"offsets": false,"filter" : {"max_num_terms" : 3,"min_term_freq" : 1,"min_doc_freq" : 1} }響應(yīng):
{"_index": "imdb","_type": "_doc","_version": 0,"found": true,"term_vectors": {"plot": {"field_statistics": {"sum_doc_freq": 3384269,"doc_count": 176214,"sum_ttf": 3753460},"terms": {"armored": {"doc_freq": 27,"ttf": 27,"term_freq": 1,"score": 9.74725},"industrialist": {"doc_freq": 88,"ttf": 88,"term_freq": 1,"score": 8.590818},"stark": {"doc_freq": 44,"ttf": 47,"term_freq": 1,"score": 9.272792}}}} }總結(jié)
以上是生活随笔為你收集整理的12.term_vectors查看的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 11.reindex操作
- 下一篇: 13.multi-term-vector