2012-03-13 16 views
5

एक में साथ या बयान एकाधिक फ़ील्ड में खोज करने के लिए कैसे एक स्ट्रिंग है, चलो कहते हैं कि "AB CD"ElasticSearch

मैं क्षेत्रों के साथ दस्तावेजों जाने डी ', ...' z '] (सभी दस्तावेजों में सभी फ़ील्ड नहीं हैं)

मैं केवल फ़ील्ड' ए ',' सी ',' एफ ',' एक्स 'में खोज चाहता हूं लेकिन मैं सभी क्षेत्रों को वापस करना चाहता हूं दस्तावेज़ में

हिट सफल है अगर फ़ील्ड 'ए', 'सी', 'एफ', 'एक्स' में से कोई भी स्ट्रिंग 'एब' या 'सीडी' शुरू होता है।

अब मैं इसका उपयोग करता हूं लेकिन यह सभी फ़ील्ड में चयनित क्षेत्रों में नहीं खोजता है।

{ 
    "query": { 
     "query_string" : { 
      "fields" : ["a", "c", "f", "x"], 
      "query" : "Ab* Cd*" 
     } 
    } 
} 

वैकल्पिक रूप से, आप क्षेत्र के नाम के साथ हर शब्द उपसर्ग कर सकते हैं::

{'query': {'query_string': {'query': "Ab* Cd*"}}} 

उत्तर

14

यह क्षेत्रों है कि आप क्वेरी में डिफ़ॉल्ट रूप से खोज करना चाहते हैं की सूची निर्दिष्ट करने संभव है

{'query': {'query_string': {'query': "a:Ab* c:Ab* f:Ab* x:Ab* a:Cd* c:Cd* f:Cd* x:Cd*"}}} 

Query String Query लोचदार खोज गाइड का पृष्ठ जो इन और अन्य उपयोगी विकल्पों का वर्णन करता है।

+0

धन्यवाद, यह समस्या हल करता है। –

4

यह वही है जो मैं ढूंढ रहा था। मामले में किसी को भी इस का एक जावा संस्करण की तलाश:

QueryStringQueryBuilder qsqb = new QueryStringQueryBuilder("Ab* Cd*") 
      .field("a", 2) 
      .field("b") 
      .field("c") 
      .field("f") 
      .field("x"); 

तुम भी क्षेत्र स्तर यदि आप क्षेत्र "एक" में उपरोक्त कोड के लिए पता चलता के रूप में चाहते हैं बढ़ाने का उपयोग कर सकते हैं।