वहाँ भी एक और तरीका निम्नलिखित 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"
}
}
}
}'
यह डरावना है !!! बहुत बढ़िया जवाब! – javanna
यह डरावना है, लेकिन मजेदार है। :) मेरी इच्छा है कि डॉक लुकअप में इंडेक्स रीडर का उपयोग करना संभव था (यह वहां है, लेकिन इस समय यह निजी है)। फिर दूसरी बार पाठ का दोबारा विश्लेषण करने के बजाय शब्द वैक्टर का उपयोग करना संभव होता। – imotov
हाँ, यकीन है। स्क्रिप्ट के बिना वैक्टर शब्द को पढ़ने के लिए भी अच्छा नहीं होगा, शायद प्लगइन के माध्यम से? – javanna