2012-11-01 12 views
19

मैं एक विशेष क्षेत्र की टोकन परिणामelasticsearch - एक क्षेत्र के टोकन लौटें

उदाहरण के लिए, एक GET अनुरोध में लौट आए कैसे हो सकता है

curl -XGET 'http://localhost:9200/twitter/tweet/1' 

रिटर्न

{ 
    "_index" : "twitter", 
    "_type" : "tweet", 
    "_id" : "1", 
    "_source" : { 
     "user" : "kimchy", 
     "postDate" : "2009-11-15T14:12:12", 
     "message" : "trying out Elastic Search" 
    } 
} 

मैं परिणाम

उत्तर

27

वहाँ भी एक और तरीका निम्नलिखित script_fields स्क्रिप्ट का उपयोग कर यह करने के लिए है:

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

    } 
}' 

यह ध्यान रखें कि जबकि इस स्क्रिप्ट वास्तविक नियम अनुक्रमित रहे थे देता है, यह भी सभी फ़ील्ड मान कैश और बड़े पर महत्वपूर्ण है सूचकांक बहुत मेमोरी का उपयोग कर सकते हैं।

import org.apache.lucene.analysis.tokenattributes.CharTermAttribute; 
import java.io.StringReader; 

// Cache analyzer for further use 
cachedAnalyzer=(isdef cachedAnalyzer)?cachedAnalyzer:doc.mapperService().documentMapper(doc._type.value).mappers().indexAnalyzer(); 

terms=[]; 
// Get value from Fields Lookup 
//val=_fields[field].values; 

// Get value from Source Lookup 
val=_source[field]; 

if(val != null) { 
    tokenStream=cachedAnalyzer.tokenStream(field, new StringReader(val)); 
    CharTermAttribute termAttribute = tokenStream.addAttribute(CharTermAttribute); 
    while(tokenStream.incrementToken()) { 
    terms.add(termAttribute.toString()) 
    }; 
    tokenStream.close(); 
} 
terms 

यह MVEL स्क्रिप्ट config/scripts/analyze.mvel के रूप में जमा किया जा सकता है और इस्तेमाल किया: तो, बड़े सूचकांक पर, यह अधिक उपयोगी संग्रहीत क्षेत्रों या स्रोत से फ़ील्ड मान निकालते हैं और निम्नलिखित MVEL स्क्रिप्ट का उपयोग कर मक्खी पर उन्हें फिर से Reparse हो सकता है निम्नलिखित क्वेरी के साथ:

curl 'http://localhost:9200/test-idx/_search?pretty=true' -d '{ 
    "query" : { 
     "match_all" : { } 
    }, 
    "script_fields": { 
     "terms" : { 
      "script": "analyze", 
      "params": { 
       "field": "message" 
      } 
     } 

    } 
}' 
+3

यह डरावना है !!! बहुत बढ़िया जवाब! – javanna

+0

यह डरावना है, लेकिन मजेदार है। :) मेरी इच्छा है कि डॉक लुकअप में इंडेक्स रीडर का उपयोग करना संभव था (यह वहां है, लेकिन इस समय यह निजी है)। फिर दूसरी बार पाठ का दोबारा विश्लेषण करने के बजाय शब्द वैक्टर का उपयोग करना संभव होता। – imotov

+0

हाँ, यकीन है। स्क्रिप्ट के बिना वैक्टर शब्द को पढ़ने के लिए भी अच्छा नहीं होगा, शायद प्लगइन के माध्यम से? – javanna

6

में शामिल '_source.message' फ़ील्ड के टोकन रखना चाहता हूं यदि आपका मतलब टोक़ है ऐसा लगता है कि अनुक्रमित किया गया है आप संदेश क्षेत्र पर terms facet बना सकते हैं। अधिक प्रविष्टियों को वापस पाने के लिए size मान बढ़ाएं, या सभी शर्तों को प्राप्त करने के लिए 0 पर सेट करें।

लुसीन शब्द वैक्टर को स्टोर करने की क्षमता प्रदान करता है, लेकिन अब तक लोचदार खोज के साथ इसका उपयोग करने का कोई तरीका नहीं है (जहां तक ​​मुझे पता है)।

आपको इसकी आवश्यकता क्यों है? यदि आप केवल यह जांचना चाहते हैं कि आप क्या अनुक्रमणित कर रहे हैं तो आप analyze api पर एक नज़र डाल सकते हैं।

+0

अच्छा, यह वही है जो मैं ढूंढ रहा हूं। धन्यवाद – Kennedy