elasticsearch - लोचदार खोज केवल कुछ खेतों को वापस करें?




(6)

मैं अपने दस्तावेजों को इंडेक्स करने के लिए लोचदार खोज का उपयोग कर रहा हूं।

क्या यह केवल पूरे जेसन दस्तावेज़ के बदले विशेष फ़ील्ड को वापस करने के लिए निर्देश देना संभव है?


यहां एक और समाधान, अब एक मिलान अभिव्यक्ति का उपयोग कर रहा है

स्रोत फ़िल्टरिंग
यह नियंत्रित करने की अनुमति देता है कि प्रत्येक हिट के साथ _source फ़ील्ड कैसे लौटाया जाता है।

Elastiscsearch संस्करण 5.5 के साथ परीक्षण किया

कीवर्ड "शामिल" विनिर्देश फ़ील्ड को परिभाषित करता है।

GET /my_indice/my_indice_type/_search
{
    "_source": {
        "includes": [ "my_especific_field"]
        },
        "query": {
        "bool": {
                "must": [
                {"match": {
                    "_id": "%my_id_here_without_percent%"
                    }
                }
            ]
        }
    }
}

Elasticsearch 5.x में उपर्युक्त दृष्टिकोण बहिष्कृत है। आप _source दृष्टिकोण का उपयोग कर सकते हैं, लेकिन कुछ स्थितियों में यह एक फ़ील्ड को स्टोर करने के लिए समझ में आता है। उदाहरण के लिए, यदि आपके पास शीर्षक, एक तिथि और एक बहुत बड़ी सामग्री फ़ील्ड वाला दस्तावेज़ है, तो आप उन फ़ील्ड को बड़े _source फ़ील्ड से निकालने के बिना केवल शीर्षक और तारीख को पुनर्प्राप्त करना चाहेंगे:

इस मामले में, आप इसका उपयोग करेंगे:

{  
   "size": $INT_NUM_OF_DOCS_TO_RETURN,
   "stored_fields":[  
      "doc.headline",
      "doc.text",
      "doc.timestamp_utc"
   ],
   "query":{  
      "bool":{  
         "must":{  
            "term":{  
               "doc.topic":"news_on_things"
            }
         },
         "filter":{  
            "range":{  
               "doc.timestamp_utc":{  
                  "gte":1451606400000,
                  "lt":1483228800000,
                  "format":"epoch_millis"
               }
            }
         }
      }
   },
   "aggs":{  

   }
}

संग्रहित फ़ील्ड को अनुक्रमणित करने के तरीके पर दस्तावेज़ देखें। एक उपवास के लिए हमेशा खुश!


जावा में आप इस तरह setFetchSource का उपयोग कर सकते हैं:

client.prepareSearch(index).setTypes(type)
            .setFetchSource(new String[] { "field1", "field2" }, null)

मुझे get api के सहायक होने के लिए दस्तावेज़ मिलते हैं - विशेष रूप से दो खंड, स्रोत फ़िल्टरिंग और फ़ील्ड्स : http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/docs-get.html

वे स्रोत फ़िल्टरिंग के बारे में बताते हैं:

यदि आपको केवल पूर्ण _ स्रोत से एक या दो फ़ील्ड की आवश्यकता है, तो आप उन हिस्सों को शामिल या फ़िल्टर करने के लिए _source_include और _source_exclude पैरामीटर का उपयोग कर सकते हैं। यह बड़े दस्तावेजों के साथ विशेष रूप से सहायक हो सकता है जहां आंशिक पुनर्प्राप्ति नेटवर्क ओवरहेड पर सहेजी जा सकती है

जो मेरे उपयोग मामले पूरी तरह से फिट किया। मैं बस इस तरह स्रोत को फ़िल्टर करना समाप्त कर दिया (शॉर्टेंड का उपयोग करके):

{
    "_source": ["field_x", ..., "field_y"],
    "query": {      
        ...
    }
}

एफवाईआई, वे फ़ील्ड पैरामीटर के बारे में दस्तावेज़ों में बताते हैं:

प्राप्त ऑपरेशन संग्रहीत फ़ील्ड का एक सेट निर्दिष्ट करने की अनुमति देता है जो फ़ील्ड पैरामीटर को पास करके वापस कर दिया जाएगा।

ऐसा लगता है कि फ़ील्ड को विशेष रूप से संग्रहीत किया गया है, जहां यह प्रत्येक फ़ील्ड को सरणी में रखता है। यदि निर्दिष्ट फ़ील्ड संग्रहीत नहीं किए गए हैं तो यह प्रत्येक को _source से लाएगा, जिसके परिणामस्वरूप 'धीमी' पुनर्प्राप्ति हो सकती है। मुझे टाइप ऑब्जेक्ट के फ़ील्ड लौटने की कोशिश करने में भी परेशानी थी।

तो संक्षेप में, आपके पास दो विकल्प हैं, या तो स्रोत फ़िल्टरिंग या [संग्रहीत] फ़ील्ड।


response_filtering

सभी आरईएसटी एपीआई एक filter_path पैरामीटर स्वीकार करते हैं जिसका उपयोग elasticsearch द्वारा लौटाई गई प्रतिक्रिया को कम करने के लिए किया जा सकता है। यह पैरामीटर डॉट नोटेशन के साथ व्यक्त फ़िल्टर की कॉमा से अलग सूची लेता है।

https://.com/a/35647027/844700


For the ES versions 5.X and above you can a ES query something like this

    GET /.../...
    {
      "_source": {
        "includes": [ "FIELD1", "FIELD2", "FIELD3" ... " ]
      },
      .
      .
      .
      .
    }






elasticsearch