2012-11-15 54 views
31

嘗試訪問我的ElasticSearch文檔中的已分析/標記化文本。從ElasticSearch文檔檢索已分析的標記

我知道你可以使用Analyze API分析根據您的分析模塊任意文本。因此,我可以將文檔中的數據複製並粘貼到Analyze API中,以查看它是如何標記的。

雖然這似乎不必要的時間消耗。有什麼方法可以指示ElasticSearch在搜索結果中返回標記文本嗎?我瀏覽過文檔並沒有發現任何內容。

回答

14

看一看這個其他答案:elasticsearch - Return the tokens of a field。不幸的是,它需要使用提供的腳本來即時重新分析您的字段的內容。
應該可以編寫一個插件來公開這個特性。該想法是將兩個端點添加到:

  • 允許讀了Lucene TermsEnum像Solr的TermsComponent確實,使自動建議太有用了。請注意,它不會是每個文檔,只是與詞頻和文檔頻率(有很多獨特的方面潛在的昂貴)
  • 允許如果允許,像Solr的TermVectorComponent不讀詞向量索引每學期。這將是每個文檔,但需要存儲術語矢量(您可以將其配置到您的映射中),並且還允許檢索位置和偏移(如果啓用)。
+0

我也有必要對第一種情況,但我不關心的頻率,我只想要一個清單 - 所以我的計劃就是通過現場數據緩存迭代(如正常任期方面做)但沒有收集計數。我有一個部分編寫的插件。 –

+0

不錯的工作,如果你可以在github上分享它,這將是很好的! :) – javanna

+0

如果你是指我 - 是的,當它完成後,在這裏:https://github.com/ptdavteam/elasticsearch-approx-plugin –

15

這個問題是豆蔻老,但也許我認爲一個額外的答案是必要的。

使用ElasticSearch 1.0.0時,添加了Term Vector API,您可以在每個文檔的基礎上直接訪問標記ElasticSearch存儲。 API文檔在這方面不太清楚(僅在示例中提到),但爲了使用API​​,您必須首先在您的mapping definition中指出要在每個字段中存儲具有term_vector屬性的術語向量。

5

您可能需要使用腳本,但是您的服務器應啓用腳本。

curl 'http://localhost:9200/your_index/your_type/_search?pretty=true' -d '{ 
    "query" : { 
     "match_all" : { } 
    }, 
    "script_fields": { 
     "terms" : { 
      "script": "doc[field].values", 
      "params": { 
       "field": "field_x.field_y" 
      } 
     } 
    } 
}' 

允許的默認設置的腳本取決於彈性搜索版本,請檢查出從官方文檔。

相關問題